我可以在函数中创建一个全局变量:
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做到这一点。
感谢您的回答,但是为什么执行官不起作用的问题仍然存在。是以某种方式在不同的背景下执行?它是不同模块的一部分,因此它在不同的模块中创建一个全局变量吗?
答案 0 :(得分:4)
In [1]: globals()['x'] = 42
In [2]: x
Out[2]: 42
如果从函数中完成,它的工作方式相同。
答案 1 :(得分:4)
答案 2 :(得分:2)
使用全局函数
globals()[varname] = value
globals函数返回一个包含模块全局变量的字典。
答案 3 :(得分:1)
你可以,看看其他答案。
但你真的不应该。
全局变量并不是一个坏主意;更大的问题是,查看对f()
或f(x)
的简单调用,您不知道您只修改了本地(即本例中为全局)范围。
def f():
return 1
x = f()
print x
完全相同,但记录了该范围内范围内发生的事情。