python编程闭包
什么是闭包闭包的特性,不会去取模块中的变量,而是取环境变量 闭包意义:保存现场(环境变量),保证函数运行的正确性 闭包 = 函数 + 环境变量 def curve_pre(): a = 2 def curve(x): return a * x return curve # 函数可以作为返回结果, a = 10 f = curve_pre() # 函数可以赋值给另外一个变量 print(f.__closure__) print(f.__closure__[0].cell_contents) # print(f(2))(,) 2
一个实例看闭包 def f1(): a = 10 def f2(): a = 20 print(a) print(a) # 10 f2() # a = 20 print(a) # a = 10 f1()10 20 10
闭包经典误区def f1(): a = 10 def f2(): a = 20 return a return f2 f = f1() print(f.__closure__) None 是闭包吗? 不是 因为没有环境变量,a被python认为是一个局部变量了
def f1(): a = 10 def f2(): return a return f2 f = f1() print(f.__closure__) print(f.__closure__[0].cell_contents)(,) 10
非必包解决和闭包解决闭包的作用,辅助作用,函数式编程的一种,在代码的架构上更加合理 # 购物最后剩余多少钱? money = 10 def buy(price): global money new_money = money - price money = new_money # 有局部变量就不会去找外面的定义了 要记住最新的钱 return money print(buy(5)) print(buy(1)) print(buy(2)) 5 4 2
# 闭包: money = 10 def factory(money): def buy(price): nonlocal money new_money = money - price money = new_money return money return buy bag = factory(money) print(bag(5)) print(bag.__closure__[0].cell_contents) print(bag(1)) print(bag.__closure__[0].cell_contents) print(bag(2)) print(bag.__closure__[0].cell_contents) print(money) # 记忆上一次调用的状态 闭包封闭性,变量不受外部的影响 5 5 4 4 2 2 10 | |