在定义的函数中识别/接受的非全局变量

时间:2016-06-02 01:08:21

标签: python for-loop global

我正在学习和试验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在被调用函数中被识别并具有它在调用函数中的值,即使它没有被定义为全局?

2 个答案:

答案 0 :(得分:1)

变量的范围解析遵循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/

答案 1 :(得分:0)

您在模块范围中定义了i,默认情况下,您可以在函数范围内阅读i。如果您要修改 global i,则只需在get_number内使用i