首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在定义的函数中识别/接受非全局变量

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

Stack Overflow用户
提问于 2016-06-02 09:08:21
回答 2查看 54关注 0票数 1

我正在学习和试验Python,我偶然发现了这个(对我来说)非常奇怪的案例。我尽我所能地搜索,但除了如何使用全局变量和局部变量,或者如何使用'for‘循环之外,我什么也找不到。我有以下代码( Android Qpython3上的Python3.2),为了简单起见进行了修改:

代码语言:javascript
运行
复制
def get_number():
    x=5**i
    print(x)
    return(x)

for i in range(1,5):
    y=get_number()
    print(y)

我意识到我在调用的函数中使用变量i是一个错误,因为我没有将它定义为全局变量。然而,当我运行脚本时,它起作用了(!)给出了以下输出:

代码语言:javascript
运行
复制
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在被调用的函数中被识别,并具有它在调用函数中的值,即使它没有被定义为全局变量?

EN

回答 2

Stack Overflow用户

发布于 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/

票数 1
EN

Stack Overflow用户

发布于 2016-06-02 09:18:22

您在模块作用域中定义了i,默认情况下,它允许您在函数作用域中读取i。如果你想修改global i,只需要在get_number内部使用i即可。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37581126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档