什么叫闭包
外部函数的变量被内部函数引用,就叫做闭包
闭包套路
def outFunc():
def innerFunc():
return innerFunc
在此基础做修改
闭包举例
累加
def counter(FIRST=0):
cnt = [FIRST]
def add_one():
cnt[0] += 1
return cnt[0]
return add_one
addOne = counter(5)
print(addOne())
print(addOne())
在内部函数中,在等号左侧使用外部函数变量,会被认为是局部变量,如何回避这个问题,如何使外部函数变量在内部函数中参与运算
- 使用nonlocal
def counter(seed):
sum = seed
def add_one():
nonlocal sum
sum += 1
return sum
return add_one
addOne = counter(5)
print(addOne())
print(addOne())
- 如上使用单元素数组代替(如上累加例子)
一元一次方程
# a * x + b = y
def a_line(a, b):
return lambda x: a * x + b
line1 = a_line(3, 5)
print(line1(10))
结合lambda使代码更优雅
为什么用闭包
- 从代码编写角度,使用闭包,可以使一次性设置的参数,通过外层函数传入,而多次设置的参数,可以通过内部函数进行传入。
注意
- func使函数的名称或函数的引用, 而func()是函数的调用