在运行时分配变量?

时间:2014-08-17 14:01:18

标签: python

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

ABC = 1
DEF = 2
GHI = 3

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

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:-1)

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

globals()["ABC"] = 1

但这很少见,因为大多数情况下单独的字典是更好的选择(参见Velox响应)。函数globals()只返回Python用来存储全局(模块)变量的字典。

除非你是Python专家并且你真的知道自己在做什么,否则很可能使用globals是一个坏主意(不过Python专家在这里不会问这个问题)。

不幸的是,我的问题中没有足够的信息可以通过动态创建变量来猜测你想要实现的目标,因此很难提供正确的解决方案。

答案 2 :(得分:-1)

Velox是对的,您应该使用字典存储此类数据:

vars = {}
vars['ABC'] = 1
print vars['ABC']            # 1

但是回答你的问题,你有不同的方法在运行时创建变量:

EVAL

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

eval('ABC = 1')
print ABC                    # 1

名称空间访问

您可以使用globals()locals()来访问全局和本地命名空间(它们是字典)。然后,您可以使用值添加另一个名称:

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

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