1 内嵌函数(内部函数)
在函数体内定义函数
1.1 实例 在a()函数里定义b函数
# 定义a()函数
def a():
print('a()函数')
# 定义b()函数
def b():
print('b()函数')
# 调用b()函数
b()
# 调用a()函数
a()
#输出:
#a()函数
#b()函数
2 闭包(Closure)
- 由内部函数改变而来
- 外部函数的返回值是内部函数的函数名,所以外部函数的返回值类型是
function
类型
2.1 闭包简单实例
# 定义闭包函数
def A(num1):
def B(num2):
return num1 * num2
return B
# 查看A()函数的返回值类型
type(A(2))
# 输出:<class 'function'>
# otherName = A(2)把返回的function对象附给otherName
otherName = A(2) #A()函数不再执行,num=2
# 调用B()函数
otherName(3)
# 输出:6
# 等同于上边的意思
A(2)(3)
# 输出:6
2.2 内嵌函数解决局部变量不能改变全局变量的问题
- 关键字global和nonlocal的用法说明
- 利用nonlocal 解决
# 定义闭包函数
def A():
num = 0
def B():
nonlocal num
num = num+1
return num
return B
# 输出时的疑惑
# 输出不变:原因:A()每次都是新的B()function对象
A()()
1
A()()
1
# 输出根据函数体发生变化:原因:a 指定了一个B()function对象
a = A()
a()
1
a()
2