将字符串转换为先前存在的变量名

2024-09-29 17:18:03 发布

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

如何将字符串转换为Python中的变量名?

例如,如果程序包含一个名为self.post的对象,该对象包含一个名为的变量,则我希望执行以下操作:

somefunction("self.post.id") = |Value of self.post.id|

Tags: of对象字符串self程序idvaluepost
3条回答

如堆栈溢出问题Inplace substitution from ConfigParser中所述,您正在寻找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"]

相关问题 更多 >

    热门问题