在本地环境中访问全局变量

问题描述 投票:1回答:1

考虑此代码:

Var='global'
def func():
     Var='local'
     #global Var
     print Var

即使我有一个具有相同名称的局部变量,我仍在尝试打印全局变量。但是,当我使用关键字global时,它给我一个错误。

有没有办法做到这一点?

我也很高兴解释为什么global给出错误。

python scope global-variables global local-variables
1个回答
2
投票

使用globals(),它是内置功能。从globals()的文档中:

返回代表当前全局​​符号表的字典。这始终是当前模块的字典(在函数或方法中,这是定义它的模块,而不是从中调用它的模块)。

globals()

回复您的评论:

首先尝试这个:

globals()

惊讶吗?这里发生的事情是,Python假定在函数内分配给该函数的任何变量名称都是该函数的局部变量,除非另有明确说明。如果它是仅从名称读取],并且名称在本地不存在,它将尝试在任何包含的范围(例如模块的全局范围)中查找该名称。在您的情况下,有一个局部变量Var='global' def func(): Var='local' print(globals()['Var']) 与全局变量Var='global' def func(): Var='local' global Var Var = 'Global' print(Var) func() print(Var) 同名,因此全局变量被遮盖了。由于Var在本地存在,因此不需要在任何包含范围中查找它,因此使用了本地变量。但是,当您[[change Var的值(使用Var语句)时,Python使用全局变量,这可以通过在全局范围内打印Var来看到。实际上,global Var关键字实际上是用来从任何局部子作用域修改全局变量的。参见global Var。希望清楚!P.S .:我从global答案中收集了知识。

© www.soinside.com 2019 - 2024. All rights reserved.