返回函数
1 2 3 4 5 6 7 8 9
| 例子: def count(): fs = [] def f(i): return i * i
for g in range(1, 4): fs.append(f(g)) return fs
|
1 2 3 4 5 6 7 8 9 10 11
| 例子的延申: def count(): fs = [] def g(i): def f(): return i * i return f()
for k in range(1, 4): fs.append(g(k)) return fs
|
“闭包”和“nonlocal”关键词
闭包:就是能够读取其他函数内部变量的函数,其实就是内层函数引用了外层函数的局部变量,可以理解为“定义在一个函数内部的函数”,本质上,闭包是将函数内部和函数外部连接起来的桥梁。如下所示:
1 2 3 4 5 6 7 8 9 10 11 12
| def inc(): x = 0 def fn(): return x + 1 return fn
if __name__ == "__main__": f = inc() print(f())
|
如果只是读外层变量的值,我们会发现返回的闭包函数调用一切正常,但是,如果对外层变量赋值,由于Python解释器会把x当作函数fn()的局部变量,它会报错,这个时候,用nonlocal关键词定义一下内部函数的x,即初始化内部的x,就像外层函数给x定义,赋初始值x=0一样,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13
| def inch(): x = 0 def fn(): nonlocal x x = x + 1 return x return fn
if __name__ == "__main__": f = inch() print(f()) print(f())
|