函数的使用范围:Python作用域,python 变量 作用域
误用Python作用域的规则
Python的范围解析基于称为LEGB(局部、封闭、全局、内置)的规则。这看起来很直观,对吧?其实Python中有一些微妙的点容易出错。看看这个例子:
x=10
deffoo():
.x=1
.printx
.
foo()
回溯(mostrecentcalllast):
文件 stdin ,第1行,在模块中
文件“标准输入”,第2行,信息
BoundLocalError 3360局部变量 x ReferencedBeforeAssignment怎么回事?
这是因为,当给作用域中的变量赋值时,Python会自动将该变量视为作用域的局部变量,并在作用域外阻止同名的变量。
相关:《Python视频教程》
很多时候,向函数添加赋值语句会使您从以前使用的代码中得到一个UnboundLocalError。有兴趣可以看看这篇文章。)
使用列表时尤其如此。请看下面的例子:
lst=[1,2,3]
deffoo1():
.第一附加项(5)
#那没问题.
.
foo1()
地表温度
[1,2,3,5]
lst=[1,2,3]
deffoo2():
.lst=[5]
# .这就有问题了!
.
二氧化硫()
回溯(mostrecentcalllast):
文件 stdin ,第1行,在模块中
文件“标准输入”,第2行,信息
BoundLocalerror :局部变量 lst Referencedbeforeassignment,嗯?为什么foo2有问题,foo1没有问题?
答案和上一个例子一样,只是更不易察觉。Foo1没有给lst赋值,但是foo2试图给lst赋值。注意lst=[5]只是lst=lst [5]的缩写,从中可以看出我们是在尝试给lst赋值(所以Python假设作用域是局部的)。但是这个要赋给lst的值是基于lst本身的(这里的作用域还是局部的),但是lst没有定义,这就出错了。
相关建议:
Python新手常见问题3:异常处理中使用了错误的参数
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。