Python如何在main中调用函数内的函数方式


Posted in Python onJune 01, 2020

一般在Python中在函数中定义的函数是不能直接调用的,但是如果要用的话怎么办呢?

一般情况下:

def a():#第一层函数
  def b():#第二层函数
    print('打开文件B')
b()#第二层中的函数直接调用

结果显示:

Traceback (most recent call last):
File "C:/Users/rog/Desktop/wenzhang.py", line 4, in <module>
b()
NameError: name 'b' is not defined

但是又要用,怎么办呢?这时候只要在函数a中返回b函数的函数名,就可以使用b函数了。

def a():#第一层函数
  def b():#第二层函数
    print('打开文件B')
  return(b)
s=a()#首先要调用一次a函数,将a函数的返回值给s,这里也就是b函数
s()

结果:

打开文件B
>>>

如果需要调用同一个函数内的多个函数:

这里先设置了一个全局变量Position_number,然后在a()中说明这个全局变量,再通过全局变量的改变,来调用a()中不同的函数。

Position_number=0
def a():#第一层函数
  global Position_number
  def b():#第二层函数
    print('打开文件B')
  def c():
    print('打开文件C')
  def d():
    print('打开文件D')
  if(Position_number==0):
    return(b)
  if(Position_number==1):
    return(c)
  if(Position_number==2):
    return(d)
s=a()          #首先要调用一次a函数,将a函数的返回值给s,这里也就是b函数
s()           #运行b函数
Position_number=1    #改变Position_number,使a()的返回值改变成c函数
s=a()          #将c函数赋给s
s()           #运行c函数
Position_number=2    #改变Position_number,使a()的返回值改变成c函数
s=a()         #将d函数赋给s
s()          #运行d函数

结果:

打开文件B
打开文件C
打开文件D
>>>

补充知识:python学习:解决如何在函数内处理数据而不影响原列表

关于一个如何在函数内修改三阶矩阵。

在python里,如果想要定义一个函数,把列表当c++里的形参传进去,显然是不可能的。在python里,只存在引用传递和值传递,当传进去的是一个值的时候,就是值传递,当传进去是一个列表或者是字典的时候,就是引用传递。

引用传递到函数内操作的话,在函数外的列表或者是字典也会随之改变。看来python也有不方便的地方啊!那如果我们想要处理一个矩阵或者是列表的话怎么办呢?

经过多次试验,终于找到了一种方法。在python中,字典类型的值是不可改变的,而列表是可以改变的。而他们之间的转换就是list()和tuple()。那么我们只需要在函数外的时候是字典类型,传进去后再把这个字典类型变量给一个新的字典类型变量,同时转换成一个列表类型,那么就可以任意的修改这个列表,而不影响原来的字典类型数据了!

下面是一个关于如何在函数内修改三阶矩阵的程序:

juzhen=((1,2,3),(4,5,6),(7,8,9))
def delju(juzhen):  
 print(juzhen)  
 a=list((juzhen))  
 for i in range(len(a)):    
 a[i]=list(a[i])  
 print(a)  
 for i in range(len(a)):    
 del a[i][0]    
 print(a)
delju(juzhen)
print(juzhen)

结果:

((1, 2, 3), (4, 5, 6), (7, 8, 9))
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
[[2, 3], [5, 6], [8, 9]]
((1, 2, 3), (4, 5, 6), (7, 8, 9))
>>>

才从上面的结果就可以看出,当我们传进去的时候,是一个二维的字典,然后在内部改变成一个二维的列表,然后对列表操作,最后不会对字典类型的变量有任何影响!

那可不可以在字典类型里的每一个值都是列表,然后传到函数内修改列表内的值呢?答案是不可以的。因为在字典内还是列表的形式存在的值,修改后还是会对函数外的字典类型内的列表产生影响。

如下程序:

juzhen=([1,2,3],[4,5,6],[7,8,9])
def delju(juzhen):  
 print(juzhen)  
 a=list((juzhen))  
 print(a)  
 for i in range(len(a)):    
  del a[i][0]    
 print(a) 
delju(juzhen)
print(juzhen)

结果:

([1, 2, 3], [4, 5, 6], [7, 8, 9])
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
[[2, 3], [5, 6], [8, 9]]
([2, 3], [5, 6], [8, 9])
>>>

从结果看出,在函数内部修改后,函数外部的字典内的列表也被同时修改了。

这样就说明了如何利用字典来解决函数内处理列表的问题。

方法二:

当然,还有一种比较简单的方法,我们可以直接先引入numpy:import numpy as np,然后利用numpy内的函数直接处理矩阵。也是推荐操作。

以上这篇Python如何在main中调用函数内的函数方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中的列表推导浅析
Apr 26 Python
python编程开发之类型转换convert实例分析
Nov 13 Python
Python部署web开发程序的几种方法
May 05 Python
Python实现两个list对应元素相减操作示例
Jun 09 Python
python中logging库的使用总结
Oct 18 Python
python内置函数:lambda、map、filter简单介绍
Nov 16 Python
python实现将汉字保存成文本的方法
Nov 16 Python
python实现学员管理系统
Feb 26 Python
Python实现的排列组合、破解密码算法示例
Apr 12 Python
浅谈keras中Dropout在预测过程中是否仍要起作用
Jul 09 Python
Django通过设置CORS解决跨域问题
Nov 26 Python
Django中的DateTimeField和DateField实现
Feb 24 Python
Python爬取YY评级分数并保存数据实现过程解析
Jun 01 #Python
基于Python绘制个人足迹地图
Jun 01 #Python
python 写函数在一定条件下需要调用自身时的写法说明
Jun 01 #Python
解决python调用自己文件函数/执行函数找不到包问题
Jun 01 #Python
Python如何在循环内使用list.remove()
Jun 01 #Python
IntelliJ 中配置 Anaconda的过程图解
Jun 01 #Python
解决python中import文件夹下面py文件报错问题
Jun 01 #Python
You might like
php 遍历显示文件夹下所有目录、所有文件的函数,没有分页的代码
2008/11/14 PHP
PHP中的traits实现代码复用使用实例
2015/05/13 PHP
微信公众号开发客服接口实例代码
2016/10/21 PHP
php中final关键字用法分析
2016/12/07 PHP
PHP读取并输出XML文件数据的简单实现方法
2017/12/22 PHP
php json转换相关知识(小结)
2018/12/21 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
JavaScript 判断浏览器是否支持SVG的代码
2013/03/21 Javascript
实现无刷新联动例子汇总
2015/05/20 Javascript
更靠谱的H5横竖屏检测方法(js代码)
2016/09/13 Javascript
IScroll那些事_当内容不足时下拉刷新的解决方法
2017/07/18 Javascript
vue-router 导航钩子的具体使用方法
2017/08/31 Javascript
OkHttp踩坑随笔为何 response.body().string() 只能调用一次
2018/01/08 Javascript
angular 内存溢出的问题解决
2018/07/12 Javascript
koa socket即时通讯的示例代码
2018/09/07 Javascript
小程序实现留言板
2018/11/02 Javascript
vue 自动化路由实现代码
2019/09/03 Javascript
微信小程序实现星级评价
2019/11/20 Javascript
用js限制网页只在微信浏览器中打开(或者只能手机端访问)
2020/12/24 Javascript
vue iview实现动态新增和删除
2020/06/17 Javascript
Vue与React的区别和优势对比
2020/12/18 Vue.js
python类继承用法实例分析
2015/05/27 Python
Python实现短网址ShortUrl的Hash运算实例讲解
2015/08/10 Python
python中异常捕获方法详解
2017/03/03 Python
python记录程序运行时间的三种方法
2017/07/14 Python
python paramiko利用sftp上传目录到远程的实例
2019/01/03 Python
深入浅析Python科学计算库Scipy及安装步骤
2019/10/12 Python
Python 实现opencv所使用的图片格式与 base64 转换
2020/01/09 Python
使用keras框架cnn+ctc_loss识别不定长字符图片操作
2020/06/29 Python
python中如何设置代码自动提示
2020/07/15 Python
如何实现jdbc性能优化
2012/07/30 面试题
婚礼主持词开场白
2014/03/13 职场文书
社区志愿者活动方案
2014/08/18 职场文书
国际商务专业毕业生自我鉴定2014
2014/09/27 职场文书
档案管理员岗位职责
2015/02/12 职场文书
css布局巧妙技巧之css三角示例的运用
2022/03/16 HTML / CSS