python变量作用域之nonlocal关键字

程序编写过程中,变量的作用域是非常重要的概念,决定了这个变量起作用的范围。超过了这个界限,变量就不会被找到,但是有些时候,我们感觉变量作用域太小了,需要使用更广阔范围之内的变量,我们就需要使用一些关键词来进行声明,比如下面我们将展示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]
发布了207 篇原创文章 · 获赞 16 · 访问量 9886

猜你喜欢

转载自blog.csdn.net/weixin_41855010/article/details/104636954