如何在Python中将字符串转换为变量名?
例如,如果程序包含一个名为self.post
包含名为变量的对象,我想做类似的事情:
somefunction("self.post.id") = |Value of self.post.id|
Brian.. 50
注意:千万不能在任何情况下,你所得到的名称来查找与用户输入的输入使用eval.例如,如果这来自网页,则无法阻止任何人进入:
__import__("os").system("Some nasty command like rm -rf /*")
作为论点.更好的是使用getattr()限制定义良好的查找位置,例如字典或实例.例如,要在self上查找"post"值,请使用:
varname = "post" value = getattr(self, varname) # Gets self.post
与设置类似,使用setattr():
value = setattr(self, varname, new_value)
要处理完全限定名称,例如"post.id",您可以使用类似下面的函数来代替getattr()/ setattr().
def getattr_qualified(obj, name): for attr in name.split("."): obj = getattr(obj, attr) return obj def setattr_qualified(obj, name, value): parts = name.split(".") for attr in parts[:-1]: obj = getattr(obj, attr) setattr(obj, parts[-1], value)
+1.我绝对建议使用getattr()和setattr() (3认同)
Owen.. 39
正如在Stack Overflow问题中引用问题来自ConfigParser的Inplace替换,您正在寻找eval()
:
print eval('self.post.id') # Prints the value of self.post.id
为什么不使用setattr()? (2认同)
Geo.. 15
此外,Python中还有globals()函数,它返回包含所有已定义变量的字典.你也可以使用这样的东西:
print globals()["myvar"]
gibson.. 15
你可以做一些像Geo推荐的那样的事情,或者去做:
>>> wine = 'pinot_noir' >>> vars()[wine] = 'yum' >>> pinot_noir 'yum'
注意:vars()和globals()是相同的,我只是习惯使用vars()
我很惊讶没有人叫我这个!无论如何,这是vars()
和locals()
那是一样的.
注意:千万不能在任何情况下,你所得到的名称来查找与用户输入的输入使用eval.例如,如果这来自网页,则无法阻止任何人进入:
__import__("os").system("Some nasty command like rm -rf /*")
作为论点.更好的是使用getattr()限制定义良好的查找位置,例如字典或实例.例如,要在self上查找"post"值,请使用:
varname = "post" value = getattr(self, varname) # Gets self.post
与设置类似,使用setattr():
value = setattr(self, varname, new_value)
要处理完全限定名称,例如"post.id",您可以使用类似下面的函数来代替getattr()/ setattr().
def getattr_qualified(obj, name): for attr in name.split("."): obj = getattr(obj, attr) return obj def setattr_qualified(obj, name, value): parts = name.split(".") for attr in parts[:-1]: obj = getattr(obj, attr) setattr(obj, parts[-1], value)
正如在Stack Overflow问题中引用问题来自ConfigParser的Inplace替换,您正在寻找eval()
:
print eval('self.post.id') # Prints the value of self.post.id
此外,Python中还有globals()函数,它返回包含所有已定义变量的字典.你也可以使用这样的东西:
print globals()["myvar"]
你可以做一些像Geo推荐的那样的事情,或者去做:
>>> wine = 'pinot_noir' >>> vars()[wine] = 'yum' >>> pinot_noir 'yum'
注意:vars()和globals()是相同的,我只是习惯使用vars()
我很惊讶没有人叫我这个!无论如何,这是vars()
和locals()
那是一样的.