先看看什么是闭包:以下例子中内部嵌套的函数及其对外部变量的引用共同组成了闭包
def aaa(x):
def bbb(y):
return x + y
return bbb
c = aaa(8)
print(c)
d = c(10)
print(d)
# 运行结果:
<function aaa.<locals>.bbb at 0x7f888f3c5d90> # 这就是闭包,也是个函数
18
闭包定义:闭包是有函数及其相关的引用环境组合而成的实体。
要理解这段定义就先要知道闭包产生的原因——在嵌套调用的函数中将运行结果相互隔离,避免同一种函数在多次到用中产生混乱,请看以下例子。
def aaa(x):
sum = x
def bbb():
return sum + 1
return bbb
c = aaa(8)
print(c())
d = aaa(10) # 每次调用都会产生新的闭包并保存一个新的sum变量
print(d())
# 运行结果:
9 # 第一个函数调用结果
11 # 第二个调用结果,看见了吧,多次传参运行结果没有相互影响,这就是要封装成闭包的原因!