Python 如何在全局级别定义各种变量

Python 如何在全局级别定义各种变量,python,python-3.x,Python,Python 3.x,这更像是一个学术问题,而不是其他任何问题。我可以通过以下操作在全局级别定义三个变量: first = "something" second = "other" third = "new" 但是,我必须添加大约50个变量,因此我想知道我是否可以有一个映射或元组,然后以某种方式更新全局环境。例如,类似这样的内容: toupdate = [('first', 'something'), ('second', 'other'), ('thir

这更像是一个学术问题,而不是其他任何问题。我可以通过以下操作在全局级别定义三个变量:

first = "something"
second = "other"
third = "new"
但是,我必须添加大约50个变量,因此我想知道我是否可以有一个
映射
元组
,然后以某种方式更新全局环境。例如,类似这样的内容:

toupdate = [('first', 'something'), ('second', 'other'), ('third', 'new')]
globals().update({i[0]: i[1] for i in toupdate})
上面的问题是它添加了全局
'first'
,而不是
first
。这怎么可能呢

(嗯……事实上,现在当我尝试上述方法时,它似乎有效。但不确定这样做是否正确。)

只需执行以下操作:

data = [('first', 'something'), ('second', 'other'), ('third', 'new')]
for i in data:
    globals()[i[0]] = i[1]

print(first, second, third)
输出:

something other new

如果必须在一个全局范围内生成50个变量,那么它们可能是常量,当您可以使用

导入枚举
toupdate=[('first','something'),('second','other'),('third','new')]
SomeEnum=enum.enum('SomeEnum',toupdate)
如果你真的需要在
globals
中把它放平,当然,有一种方法

vars().update(某些枚举成员)

我不明白<代码>'if'不是您列出的字符串之一。@DanielWalker我刚才的意思是stringized,但我想我可能错了。有50个全局变量是不合适的。重新考虑你的设计。@JohnZwinck它们是数学常数之类的。不太远:
>>导入数学;len(vars(math))
64
。那么为什么不保持简单,并像第一个示例那样编写它们呢?所有现有的库都是这样做的。“显式比隐式好。”这只是Python的一个咒语,但它经常适用,在这种情况下,它是一个好的咒语:全局变量几乎总是设计问题的一个标志,动态定义全局变量是一个非常糟糕的主意。@Kungpu我已经知道了,但问题是如何使用
globals()
定义全局变量,我想我回答了这个问题,这解决了askedOK的问题,但是告诉某人如何做一些实际上不是好主意的事情,对于询问者的发展和他们的同事的理智来说,会适得其反。