Python函数嵌套是怎样,函数中怎样定义函数
Admin 2022-08-08 群英技术资讯 272 次浏览
函数的嵌套:在函数里面还有函数。分为外函数和内函数。
嵌套函数是为函数内部服务的,比如减少代码的重复,想要调用函数,要使用函数名,内函数也一样。如果不用函数名调用内函数,内函数就永远不会执行。
内函数的调用
怎么在函数外部调用内函数呢?首先,不能直接调用内函数 ,需要先执行外函数的代码块。
def func1(): print("这是外部函数") def func2(): print("这是内部函数") func2()
没有执行外函数内部的代码块,python找不到内函数,所以报name ‘func2’ is not defined,函数func2()没有定义
有几种方式可以实现对内函数的调用。
1.在外函数内部调用内函数,即用函数名调用
def func1(): print("这是外部函数") def func2(): print("这是内部函数") func2() #函数名调用内函数 func1()
这样调用外函数也会执行内函数的代码块了
2.可以用return调用内函数
在使用return之前,需要说明一点:我们都是使用"函数名()“调用函数的方法,单独使用"函数名”,我们会得到函数的内存地址;(函数名后面加括号才会告诉python,参数是否对得上,然后执行函数的代码块。)
def func1(): print("这是外部函数") def func2(): print("这是内部函数") return func2() func1()
函数没有返回值,即返回值为None,"return func2()"和"func2()"的效果是一样的
def func1(): print("这是外部函数") def func2(): print("这是内部函数") return func2() m = func1() #调用函数func1(),调用函数func2的方法 print(m) #m为None
def func1(): print("这是外部函数") def func2(): print("这是内部函数") return func2 m = func1() print(m) # #执行结果为 这是外部函数 <function func1.<locals>.func2 at 0x0000000002EB6620>
上面可以看到,使用函数名得到的是函数的地址,我们可以用一个变量指向这个地址,相当于创建一个变量,这个变量指向的是函数的地址。因为只有函数名是不能调用函数的方法的,所以调用外函数时要用到双括号。
def func1(): print("这是外部函数") def func2(): print("这是内部函数") return func2 func1()() ##执行func1()会返回func2然后再func2() # m = func1() # m()
我们可以用func1()返回一个函数func2,再加一个括号调用内函数的方法。
小结:想要调用内函数,首先要调用外函数,即执行外函数的代码块,才有内函数调用的环境。在外函数内部,可以用函数名调用内函数。也可以用return调用内函数,如果return是函数本身的地址,调用外函数时会用到双括号,先调用func1()得到func2然后再func2()。如果return func2(),那么和func2()是一样的,都是告诉python调用内函数。
变量的作用范围
外函数里面的变量和内函数里面的变量是有区别的,作用范围不一样。内函数也可以使用外函数的变量,但是如果想要在内部函数修改外部函数变量的值,就要使用关键字nonlocal
def func1(): b = 2 def func2(): nonlocal b b = b - 1 func2() print(b)
在一个函数里面调用别的函数
def print1(): print("这是第一个函数") def print2(): print("这是定义的第二个函数") print1() #在print2()中调用print1() print2()
def paint(): print("paint") def paintA(): print("paintA") paintA() paint() //输出如下: //paint //paintA
在函数外部调用函数的结果如下
paintA //试图在函数外部调用paintA()
//以下是报错信息
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-15-1a59d6e3eeb5> in <module>()
5 paintA()
6 paint()
----> 7 paintANameError: name 'paintA' is not defined
但是不可以对其进行修改
a=6 def FuncX(x): def FuncY(y): return a*y // return x*y,这里也可以写这条语句进行测试,因为对于FuncY()来说,x也算外部变量,我这里主要是为了突出外部变量这个概念 return FuncY FuncX(5)(6)//把5赋给x,6赋给y //输出结果如下: 36
a=6 def FuncX(x): def FuncY(y): #global a 加上这条语句即可修改a的值 a=a*y return a #试图修改 a 的值 #return a=a*y Python不允许返回赋值表达式,并不是因为修改a的原因,这里更新一下 #更新时间 2019.1.4 return FuncY FuncX(5)(6) //报错信息 UnboundLocalError: local variable 'a' referenced before assignment
对于全局变量的修改,如果全局变量是int或者str,那么如果想要在函数中对函数变量进行修改,则需要先在函数内,声明其为global或nonlocal,在进行修改, 如果是list或者dict则可以直接修改
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
Python内置函数-list()函数。list() 方法用于将元组或字符串转换为列表。
这篇文章主要为大家介绍了python密码学RSA算法及秘钥创建教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
这篇文章主要介绍了python pandas遍历每行并累加进行条件过滤方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
决策是根据条件来执行执行程序,并指定对应操作。决策结构计算多个表达式并产生TRUE或FALSE作为结果并退出。您需要确定采取的行动,如果结果是TRUE 要执行哪些语句,或否则返回 FALSE
使用matplotlib生成gif动画的方法相信大家应该都看到过,下面这篇文章主要给大家介绍了关于Python matplotlib包和gif包生成gif动画对比的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008