在运行时分配变量?

2024-04-26 15:06:21 发布

您现在位置:Python中文网/ 问答频道 /正文

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

ABC = 1
DEF = 2
GHI = 3

我对Python很陌生,所以如果这是一个愚蠢的问题,请原谅。。。你知道吗


Tags: 文件代码应用程序defabcghigef陌生
3条回答

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

globals()["ABC"] = 1

但这是很少做的事情,因为通常一个单独的字典是更好的选择(见Velox回应)。函数globals()只是返回Python用来存储全局(模块)变量的字典。你知道吗

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

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

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

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

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

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

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

评估

可以使用^{}对字符串进行求值,就像它们是在源代码中编写的一样:

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

命名空间访问

可以使用^{}^{}访问全局和局部命名空间(它们是一个字典)。然后,可以添加另一个具有值的名称:

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

这两种方法都是不安全的,事实上,在eval中,您执行的外部代码可能是恶意的,也可能使程序崩溃。globals是程序的名称空间,弄乱它可能会使程序行为不正常。所以考虑坚持使用字典。你知道吗

相关问题 更多 >