返回函数
Python的函数不但可以返回int、str、list、dict等数据类型,还可以返回函数
例如,定义一个函数 f(),我们让它返回一个函数 g,可以这样写:
def f():
print("f running...")
def g():
print("g running...")
return g
变量是可以指向函数的,函数名是指向函数的变量。
g = f() # 返回变量g,输出"f running...",
g() # 调用变量g指向的函数g(),输出"g running..."
闭包
闭包保留了变量的作用域,正常情况下,函数执行完后,函数内的局部变量会被销毁,但是如果内层函数引用了外层函数的变量,在内层函数未执行之前,外层函数的局部变量会一直保留。要正确使用闭包,就要确保引用的局部变量在函数返回后不能变。
示例:
计算1x1、2x2、3x3
def count():
fs = []
for i in range(1, 4):
def f(i):
def g():
return i*i # 内层函数引用外层函数的变量i
return g # 外层函数返回指向函数g()的变量g,当内层函数g()未执行时,变量i会一直保存
fs.append(f(i))
return fs
f1, f2, f3 = count()
print(f1()) # 调用1*1
print(f2()) # 调用2*2
print(f3()) # 调用3*3