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

2024-09-27 09:32:48 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: 代码numberforget定义defexit全局
2条回答

您在模块作用域中定义了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/

相关问题 更多 >

    热门问题