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之关于类的初步认识
Oct 11 Python
详解Python中内置的NotImplemented类型的用法
Mar 31 Python
用Python中的wxPython实现最基本的浏览器功能
Apr 14 Python
Python中获取对象信息的方法
Apr 27 Python
Python编程之序列操作实例详解
Jul 22 Python
浅谈Python实现贪心算法与活动安排问题
Dec 19 Python
Python基于Floyd算法求解最短路径距离问题实例详解
May 16 Python
Python使用微信接入图灵机器人过程解析
Nov 04 Python
使用 Python 写一个简易的抽奖程序
Dec 08 Python
python 通过邮件控制实现远程控制电脑操作
Mar 16 Python
python随机模块random的22种函数(小结)
May 15 Python
健身房被搭讪?用python写了个小米计时器助人为乐
Jun 08 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中利用XML技术构造远程服务(上)
2006/10/09 PHP
配置支持SSI
2006/11/25 PHP
深入理解PHP原理之Session Gc的一个小概率Notice
2011/04/12 PHP
从零开始学YII2框架(四)扩展插件yii2-kartikgii
2014/08/20 PHP
MyEclipse常用配置图文教程
2014/09/11 PHP
PHP基于curl后台远程登录正方教务系统的方法
2016/10/14 PHP
根据key删除数组中指定的元素实现方法
2017/03/02 PHP
Yii框架分页实现方法详解
2017/05/20 PHP
PHP自动生成缩略图函数的源码示例
2019/03/18 PHP
laravel 修改.htaccess文件 重定向public的解决方法
2019/10/12 PHP
JS 添加千分位与去掉千分位的示例
2013/07/11 Javascript
jquery sortable的拖动方法示例详解
2014/01/16 Javascript
javascript表单验证和Window详解
2014/12/11 Javascript
js实现的鼠标滚轮滚动切换页面效果(类似360默认页面滚动切换效果)
2016/01/27 Javascript
Vue数组更新及过滤排序功能
2017/08/10 Javascript
vue translate peoject实现在线翻译功能【新手必看】
2018/06/07 Javascript
vue2.0的虚拟DOM渲染思路分析
2018/08/09 Javascript
Node.js Event Loop各阶段讲解
2019/03/08 Javascript
ant-design-vue按需加载的坑的解决
2020/05/14 Javascript
[03:10]2014DOTA2 TI马来劲旅Titan首战告捷目标只是8强
2014/07/10 DOTA
python实现自动重启本程序的方法
2015/07/09 Python
详解使用python的logging模块在stdout输出的两种方法
2017/05/17 Python
详解 Python 与文件对象共事的实例
2017/09/11 Python
python反转列表的三种方式解析
2019/11/08 Python
利用pandas将非数值数据转换成数值的方式
2019/12/18 Python
python正则过滤字母、中文、数字及特殊字符方法详解
2020/02/11 Python
Keras实现DenseNet结构操作
2020/07/06 Python
Html5 FileReader实现即时上传图片功能实例代码
2014/09/01 HTML / CSS
Nordgreen台湾官网:极简北欧设计手表
2019/08/21 全球购物
不开辟用于交换数据的临时空间,如何完成字符串的逆序
2012/12/02 面试题
几个Linux面试题笔试题
2016/08/01 面试题
和谐家庭演讲稿
2014/05/24 职场文书
让子弹飞观后感
2015/06/11 职场文书
解决Golang中goroutine执行速度的问题
2021/05/02 Golang
HTML怎么设置下划线?html文字加下划线方法
2021/12/06 HTML / CSS
win10截图快捷键win+shift+s没有反应无法截图怎么解决?
2022/08/14 数码科技