返回函数

Python的函数不但可以返回int、str、list、dict等数据类型,还可以返回函数
例如,定义一个函数 f(),我们让它返回一个函数 g,可以这样写:

  1. def f():
  2. print("f running...")
  3. def g():
  4. print("g running...")
  5. return g

变量是可以指向函数的,函数名是指向函数的变量。

  1. g = f() # 返回变量g,输出"f running...",
  2. g() # 调用变量g指向的函数g(),输出"g running..."

闭包

闭包保留了变量的作用域,正常情况下,函数执行完后,函数内的局部变量会被销毁,但是如果内层函数引用了外层函数的变量,在内层函数未执行之前,外层函数的局部变量会一直保留。要正确使用闭包,就要确保引用的局部变量在函数返回后不能变。

示例:
计算1x1、2x2、3x3

  1. def count():
  2. fs = []
  3. for i in range(1, 4):
  4. def f(i):
  5. def g():
  6. return i*i # 内层函数引用外层函数的变量i
  7. return g # 外层函数返回指向函数g()的变量g,当内层函数g()未执行时,变量i会一直保存
  8. fs.append(f(i))
  9. return fs
  10. f1, f2, f3 = count()
  11. printf1()) # 调用1*1
  12. printf2()) # 调用2*2
  13. printf3()) # 调用3*3