我最近了解了python vars((,以及它将字符串解释为变量的能力。我希望能够通过添加/减去和使用字符串以编程方式调用变量/字典。以下是我为测试其工作原理而编写的代码:
var1 = 3
var2 = 5
var3 = 7
#....
var_string = "var1"
x = vars()[var_string] - 1
print (x)
如果我运行代码,正如预期的那样,它解释字符串";var1";作为已经定义的全局变量var1=3。X继承var1的值并减去1,根据需要打印出2。然而,当我获取相同的代码并将其放入函数中时,它就会停止工作并返回一个键错误。
var1 = 3
var2 = 5
var3 = 7
#....
def my_Function():
var_string = "var1"
vars()[var_string]
x = vars()[var_string] - 1
print (x)
my_Function()
KeyError:"var1"。它看起来像是因为它在一个函数vars((中,不再使用全局变量,并且可能试图查看局部变量?但是添加";全局var1";到我的功能顶部似乎并没有解决它。
我知道让它工作的一种方法是将我的变量/字典附加到列表中,完全抛弃vars((,然后只调用list[#]。但是有可能避免我的变量有第二个副本吗?假设我有一本千兆字节大小的字典,我正在努力节省资源。有可能吗?我应该使用vars((的替代方案吗?谢谢
特别感谢MisterMiyagi的回答,他们发表了评论,但没有发布供我选择的答案。我正在寻找的vars((的替代函数是globals((。问题是,我试图做的并不是vars((的用法。
var1 = 3
var2 = 5
var3 = 7
#....
def my_Function():
var_string = "var1"
x = globals()[var_string] - 1
print (x)
也可以通过使用另一个字典来实现类似的结果,而不需要花费过多的资源,这要归功于名称空间的工作方式,这不是问题的重点,但已经涉及到了。