程序编写过程中,变量的作用域是非常重要的概念,决定了这个变量起作用的范围。超过了这个界限,变量就不会被找到,但是有些时候,我们感觉变量作用域太小了,需要使用更广阔范围之内的变量,我们就需要使用一些关键词来进行声明,比如下面我们将展示nonlocal的作用。
我们运行以下代码:
def f():
i=0
def auto_increase():
#nonlocal i
if i >=10:
i=0
i+=1
ret = []
for _ in range(28):
auto_increase()
ret.append(i)
print(ret)
f()
运行结果如下:
Traceback (most recent call last):
File "E:\python60days\kw_yeild\day_19.py", line 44, in <module>
f()
File "E:\python60days\kw_yeild\day_19.py", line 40, in f
auto_increase()
File "E:\python60days\kw_yeild\day_19.py", line 35, in auto_increase
if i >=10:
UnboundLocalError: local variable 'i' referenced before assignment
[Finished in 1.0s with exit code 1]
报错显示其中的i在赋值(assignment)之前就被引用(refer)了,解决方法是声明i是一个非本地的变量。我们注意到代码中有一行被注释的非本地变量声明代码:
nonlocal i
取消这一行的注释,我们就可以顺利运行这段代码了,修改之后的结果如下:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8]
[Finished in 1.0s]