Python,将变量值作为变量进行求值

Python,将变量值作为变量进行求值,python,Python,我想做如下事情:特别是“f.eval(field)”部分,它将变量的值作为字段名进行计算。如何在Python中实现这一点 def punctuated_object_list(objects, field): field_list = [f.eval(field) for f in objects] if len(field_list) > 0: if len(field_list) == 1: return field_list[0

我想做如下事情:特别是“f.eval(field)”部分,它将变量的值作为字段名进行计算。如何在Python中实现这一点

def punctuated_object_list(objects, field):
    field_list = [f.eval(field) for f in objects]
    if len(field_list) > 0:
        if len(field_list) == 1:
            return field_list[0]
        else:
            return ', '.join(field_list[:-1]) + ' & ' + field_list[-1]
    else:
        return u''

getattr(f,field)
,如果我理解正确(也就是说,如果您可能有
field=“foo”
,并且想要
f.foo
)。如果不是,你可能想澄清一下。Python有一个
eval()
,我不知道你想要与之等价的其他语言
eval()
eval()
的Python等价物是
eval()

我给你18英镑

v = "x"
eval(v+"*2")

同样有效。

要获取Python对象中所有字段的列表,您可以访问其
\uuuu dict\uuu
属性

class Testing():
    def __init__(self):
        self.name = "Joe"
        self.age = 30

test = Testing()
print test.__dict__
结果:

{'age': 30, 'name': 'Joe'}
有关详细信息,请参阅:

不要使用eval,即使在这种特殊情况下字符串是安全的!只是不要让你自己习惯它。如果您从用户处获取字符串,则可能是恶意代码


墨菲定律:如果事情出了差错,他们会的。

+1秒击败我:-)奖金医生:愚蠢的我。。。python中的eval(eval())。。。谢谢你的回答!eval是邪恶的!最好不要使用它,总有更好的方法不一样。对象甚至可能没有这样一个易于访问的dict(如果对象是mean,则可能必须执行类似于object.\uuuu getattribute\uuuuu(foo,'dict')的操作),并且它可能有一个新的getattr。谁会插入“恶意”代码?Python作为源代码分发。当代码可以更改时,为什么要让eval中断呢?eval的安全性不亚于Python的所有其他部分。+1感谢您在我需要之前提出这个问题:)。
{'age': 30, 'name': 'Joe'}
getattr( object, 'field' ) #note that field is a string

f = 'field_name'
#...
getattr( object, f )


#to get a list of fields in an object, you can use dir()
dir( object )