python中闭包 - ZhangMaozheng/Python GitHub Wiki

定义:内层函数引用了外层函数的变量,然后返回内层函数的情况视为闭包。

闭包的特点是返回的函数还引用了外层函数的局部变量,所以,要正确使用闭包,就要确保引用的局部变量在函数返回后不能改变。

eg: # 希望一次返回3个函数,分别计算1x1,2x2,3x3:

def count():
  fs = []
  for i in range(1, 4):
    def f():
      return i*i
    fs.append(f)
  return fs
f1, f2, f3 = count()
# 实际结果全部为9,原因就是当count()函数返回了3个函数时,这3个函数所引用的变量 i 的值已经变成了3。由于f1、f2、f3并没有被调用,所以,此时他们并未计算 i*i。 因此,返回函数不要引用任何循环变量,或者后续会发生变化的变量。
⚠️ **GitHub.com Fallback** ⚠️