我正在学习和试验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在被调用的函数中被识别,并具有它在调用函数中的值,即使它没有被定义为全局变量?
发布于 2016-06-02 09:27:22
变量的作用域解析遵循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/
发布于 2016-06-02 09:18:22
您在模块作用域中定义了i,默认情况下,它允许您在函数作用域中读取i。如果你想修改global i,只需要在get_number内部使用i即可。
https://stackoverflow.com/questions/37581126
复制相似问题