本文主要是python闭包问题的记录。

python 实现的有内部函数,那么自然就会使用内部函数外面的变量 。

注意这里是要改变局部变量 可以使用下面的策略,如果只是简单的引用,可以直接引用 不用使用 nonlocal 关键字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
def A():
xxx = 0
def B():
#这个时候你可能会使用xxx变量。 直接引用是会报错的
#告诉你使用了没有分配的引用 referenced before assignment
nonlocal xxx
xxx += 1
return xxx
return B
f = A()
print(f(),f(),f())

# 输出 1 2 3

这里主要是使用了python 内部的关键字 nonlocal
主要是引用内部函数以外的局部变量 注意这里不是全局变量。

注意这个关键字是python3.x 中可以出现的关键字。在python2.x中会报错。
在python2.x的版本中可以使用 list 封装一层,实现使用内部函数以外的局部变量。
这里不能使用 元祖 因为元祖的变量时不可变的。


如果要引用全局变量要是用python的另外一个关键字 global。
用法和上面相同。 使用例子如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
xxx = 0
def A():
def B():
#这个时候你可能会使用xxx变量。 直接引用是会报错的
#告诉你使用了没有分配的引用 referenced before assignment
global xxx
xxx += 1
return xxx
return B
f = A()
print(f(),f(),f())

# 输出 1 2 3

最后更新: 2019年08月14日 11:22

原始链接: https://leng521.top/posts/87435431/