我正在学习和试验Python,我偶然发现这个非常奇怪(对我来说)的情况。我尽可能多地搜索,但除了如何使用全局和局部变量或如何使用'for'循环之外,找不到任何其他内容。我有以下代码(Android Qpython3上的Python 3.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在被调用函数中被识别并具有它在调用函数中的值,即使它没有被定义为全局?
答案 0 :(得分:1)
变量的范围解析遵循LEGB规则,即python尝试在以下范围中查找变量(递减优先级):
Local -> Enclosed -> Global -> Built-in
在您的情况下,i
仅在封闭范围内定义。
答案 1 :(得分:0)
您在模块范围中定义了i
,默认情况下,您可以在函数范围内阅读i
。如果您要修改 global i
,则只需在get_number
内使用i
。