2

我可以在函数中创建一个全局变量:

def f():
    global x
    x=1

f()
print x

但是,如果我在 f() 中只有该变量的名称,我可以这样做吗?

def f(varname):
    exec('global ' + varname)
    exec(varname + '=1')

f('x')
print x

这不起作用 - “名称'x'未定义”。不要告诉我这是一种糟糕的编程风格——我知道。问题是这是否可以在 Python 中实现。

感谢您的回答,但为什么 exec 不起作用的问题仍然存在。是否以某种方式在不同的上下文中执行?它是不同模块的一部分,以便在不同模块中创建全局变量吗?

4

4 回答 4

4
In [1]: globals()['x'] = 42

In [2]: x
Out[2]: 42

如果在函数内完成,它的工作方式相同。

于 2012-05-03T15:22:06.270 回答
4

是的,您可以使用globals()

globals()['whatever'] = 123

(很高兴你意识到这不是一个很好的风格)

于 2012-05-03T15:23:05.197 回答
2

使用全局函数

globals()[varname] = value

globals 函数返回一个包含模块全局变量的字典。

于 2012-05-03T15:24:25.587 回答
1

你可以,看看其他答案。

但你真的不应该。

并不是说全局变量自然是个坏主意。更大的问题是,查看对f()or的简单调用f(x),您不知道您只是修改了本地(即在本例中为全局)范围。

def f():
    return 1

x = f()
print x

完全相同,但记录了该范围内的范围内发生的事情。

于 2012-05-03T15:31:18.687 回答