我正在学习和实验Python,我无意中发现了这个(对我来说)非常奇怪的案例。我尽可能多地搜索,但除了如何使用全局和局部变量,或者如何使用“for”循环之外,找不到其他任何东西。为了简单起见,我修改了以下代码(Android Qpython3上的Python3.2):
def get_number():
x=5**i
print(x)
return(x)
for i in range(1,5):
y=get_number()
print(y)
我意识到在被调用函数中使用变量I是一个错误,因为我没有将它定义为全局变量。然而,当我运行脚本时,它工作了(!)给我以下输出:
hon.sh "/storage/emulated/0/com.hipipal.qpyplus/scripts3/AK_SCRIPTS/.last_tmp.py" && exit <
5
5
25
25
125
125
625
625
#[QPython] Press enter to exit
有人能解释一下为什么变量i在被调用函数中被识别,并且在调用函数中具有它的值,即使它没有被定义为全局变量?你知道吗
您在模块作用域中定义了
i
,默认情况下,它允许您在函数作用域中读取i
。如果要修改i
,只需在get_number
内使用global i
。你知道吗变量的作用域解析遵循LEGB规则,即python尝试在以下作用域中查找变量(优先级递减):
Local -> Enclosed -> Global -> Built-in
在您的例子中,
i
只在封闭的范围内定义。你知道吗有关详细信息,请参见http://spartanideas.msu.edu/2014/05/12/a-beginners-guide-to-pythons-namespaces-scope-resolution-and-the-legb-rule/
相关问题 更多 >
编程相关推荐