22

假设我有一个全局变量a。在函数定义中,我们还有一个名为 的局部变量a。有没有办法将全局变量的值分配给局部变量的值?

a = 'foo'

def my_func(a = 'bar'):
    # how to set global a to value of the local a?
4

4 回答 4

36

使用内置函数globals()

globals()

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

a = 'foo'

def my_func(a = 'bar'):
    globals()['a'] = a

顺便说一句,值得一提的是,全局只是模块范围内的“全局”。

于 2012-04-19T20:21:05.540 回答
1
>>> a = 'foo'
>>> def my_func(a='bar'):
...     return globals()['a']
...
>>> my_func()
'foo'
于 2012-04-19T20:23:03.383 回答
1

不要一开始就混淆全局和本地命名空间。尽可能尝试使用局部变量而不是全局变量。如果您必须在作用域之间共享变量,您仍然可以传递变量而无需全局占位符。局部变量的引用也比全局变量更有效地访问。

几个链接:

在 Python 中共享变量

可变性能

于 2012-04-19T20:25:29.503 回答
0

让python知道你想要全局版本;

def my_func():
    global a
    a = 'bar'
于 2012-04-19T20:13:04.410 回答