2024-09-29 17:18:03 发布
网友
如何将字符串转换为Python中的变量名?
例如,如果程序包含一个名为self.post的对象,该对象包含一个名为的变量,则我希望执行以下操作:
self.post
somefunction("self.post.id") = |Value of self.post.id|
如堆栈溢出问题Inplace substitution from ConfigParser中所述,您正在寻找eval():
eval()
print eval('self.post.id') # Prints the value of self.post.id
注意:在任何情况下,如果要从用户输入的输入中查找名称,请不要使用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)
要处理fully qualified names,比如“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)
此外,还有Python中的globals()函数,它返回一个包含所有已定义变量的字典。你也可以用这样的东西:
print globals()["myvar"]
如堆栈溢出问题Inplace substitution from ConfigParser中所述,您正在寻找
eval()
:注意:在任何情况下,如果要从用户输入的输入中查找名称,请不要使用eval。例如,如果这来自一个网页,没有任何东西可以阻止任何人进入:
作为论据。最好是限制到定义良好的查找位置,例如使用getattr()的字典或实例。例如,要查找self上的“post”值,请使用:
类似地,要设置它,请使用setattr():
要处理fully qualified names,比如“post.id”,可以使用下面的函数代替getattr()/setattr()。
此外,还有Python中的globals()函数,它返回一个包含所有已定义变量的字典。你也可以用这样的东西:
相关问题 更多 >
编程相关推荐