0%

“返回函数”、“闭包”、“nonlocal”关键字

返回函数

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():
# 仅读取x的值:
return x + 1
return fn


if __name__ == "__main__":
f = inc()
print(f()) # 打印出来的结果是:1

如果只是读外层变量的值,我们会发现返回的闭包函数调用一切正常,但是,如果对外层变量赋值,由于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()) # 打印出来的结果是:1
print(f()) # 打印出来的结果是:2
点这里请我吃个小蛋糕吧~~

Welcome to my other publishing channels