Python 在运行时分配变量?

Python 在运行时分配变量?,python,Python,我有一个从输入文件的一个块中读取多个变量名的应用程序。然后,它从同一文件的另一个块中读取相关值。。e、 g.以ABC、DEF、GEF等形式读入的变量名和以1、2、3等形式读入的值。在Python中,我可以在运行时创建这些变量,例如执行以下代码 ABC = 1 DEF = 2 GHI = 3 我对Python很陌生,所以如果这是一个愚蠢的问题,请原谅…听起来你需要一本字典。字典是一种基于另一个值查找值的方法。在本例中,值是从文件中读取的字符串。例如: myvars = {} myvars['AB

我有一个从输入文件的一个块中读取多个变量名的应用程序。然后,它从同一文件的另一个块中读取相关值。。e、 g.以ABC、DEF、GEF等形式读入的变量名和以1、2、3等形式读入的值。在Python中,我可以在运行时创建这些变量,例如执行以下代码

ABC = 1
DEF = 2
GHI = 3

我对Python很陌生,所以如果这是一个愚蠢的问题,请原谅…

听起来你需要一本字典。字典是一种基于另一个值查找值的方法。在本例中,值是从文件中读取的字符串。例如:

myvars = {}
myvars['ABC'] = 1
myvars['DEF'] = 2
myvars['GHI'] = 3

在Python中,从技术上讲,您可以使用
globals
动态创建全局变量:

globals()["ABC"] = 1
但这是很少做的事情,因为通常单独的字典是更好的选择(见Velox回复)。函数
globals()
只返回Python用于存储全局(模块)变量的字典

除非您是Python专家,并且您确实知道自己在做什么,否则使用
globals
很可能是个坏主意(但是Python专家不会在这里询问)

不幸的是,您的问题中没有足够的信息让我猜测您试图通过动态创建变量来实现什么,因此很难提供正确的解决方案。

是正确的,您应该使用字典来存储此类数据:

vars = {}
vars['ABC'] = 1
print vars['ABC']            # 1
但为了回答您的问题,您有不同的方法在运行时创建变量:

评估 您可以使用来计算字符串,就像它们是在源代码中编写的一样:

eval('ABC = 1')
print ABC                    # 1
命名空间访问 您可以使用和访问全局和本地命名空间(它们是字典)。然后,您可以添加另一个具有值的名称:

globals()['ABC'] = 1
print ABC                    # 1

这两种方法都不安全,事实上,使用
eval
执行的外部代码可能是恶意的,也可能使程序崩溃
globals
是程序的名称空间,如果弄乱它,可能会导致程序行为不端。所以请考虑坚持字典。

看一看,请不要推荐坏的解决方案。@ NedBayCheld:什么是我推荐的坏的解决方案?我接受你的观点:你不推荐这样做,只是指出技术上你可以。像这样的答案是一个吸引人的麻烦:人们跳到使用这个错误的东西,因为他们不知道任何更好的。根据,你不应该修改
locals()
字典,所以不应该尝试以这种方式创建局部变量(如果没有其他原因)。