内嵌函数(内部函数)顾名思义就是一个函数里边包含另外一个函数,Python
支持在一个函数里边定义另外一个函数,并且函数作用域只在 创建函数 内。
>>> def pao1():
... print('woshi pao1...')
... def pao2():
... print('woshi pao2...')
... pao2()
>>> pao1()
woshi pao1...
woshi pao2...
>>> pao2()
函数式编程:闭包,即函数的函数
>>> def pao1(p1):
... def pao2(p2):
... print(p1*p2)
... return pao2
...
>>> p3 = pao1(3) #调用方法1
>>> p3(8)
24
>>> pao1(3)(8) #调用方法2
24
内层函数无法对外层函数定义的变量进行修改(卧槽,我这个描述简直清晰到完美!):
错误示例:
>>> def pao1():
... x = 5
... def pao2():
... x *=5
... return x
... return pao2()
...
>>> pao1()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 6, in pao1
File "<stdin>", line 4, in pao2 #不能对未进行定义的数据进行修改
UnboundLocalError: local variable 'x' referenced before assignment
因为容器类型(啥都可以往里边拾捯,话说我TM打这个 拾捯 废了一分钟)不存放在栈中,所以可以直接返回类型,如下所示:
>>> def pao1():
... x = [5]
... def pao2():
... x[0] *= x[0]
... return x[0]
... return pao2()
...
>>> pao1()
25
Python3中的关键字:nonlocal 表示变量是非局部变量,即全局变量
>>> def pao1():
... x = 7
... def pao2():
... nonlocal x
... x *= x
... return x
... return pao2()
...
>>> pao1()
49