1.闭包
形成闭包的条件
1.外部函数内定义了内部函数
2.外部函数有返回值
3.返回的是函数名
4.内部函数引用了外部函数的变量
格式:
def 外部函数():
...
def 内部函数():
...
return 内部函数
def func(): a = 100 def inner_func(): b = 99 print(a, b) return inner_func x = func() x()
闭包传参
1 def func(a, b): 2 c = 10 3 4 def inner_func(): 5 s = a+b+c 6 print("相加后的结果:", s) 7 8 return inner_func 9 10 11 # 调用func 12 ifunc = func(1, 2) # ifunc = inner_func 13 14 # 调用ifunc 15 ifunc()
2.闭包的作用
1 def func(a, b): 2 c = 10 3 4 def inner_func(): 5 s = a+b+c 6 print("相加后的结果:", s) 7 8 return inner_func 9 10 11 # 调用func 12 ifunc = func(1, 2) # ifunc = inner_func 13 14 ifunc1 = func(3, 4) 15 16 ifunc1() 17 18 # 调用ifunc 19 ifunc()
每次调用func时候,inner_func都是创建一个新的内存空间,执行inner_func内的代码
因此,每次的参数值都时被保存下来的
3. 利用闭包创建计数器
1 def generate_counter(): 2 container = [0] 3 4 def add_one(): 5 container[0] = container[0] + 1 6 print("当前是第{}次访问".format(container[0])) 7 return add_one 8 9 10 counter = generate_counter() 11 counter() 12 counter() 13 counter()