Python:是否可以创建一个名为string的全局变量?

时间:2012-05-03 15:19:17

标签: python scope

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

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做到这一点。

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

4 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:4)

是的,您可以使用globals()

globals()['whatever'] = 123

(你觉得自己这不是一个非常好的风格,这很好)

答案 2 :(得分:2)

使用全局函数

globals()[varname] = value

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

答案 3 :(得分:1)

你可以,看看其他答案。

但你真的不应该。

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

def f():
    return 1

x = f()
print x

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