Python,将变量值评估为变量

时间:2009-03-11 00:31:51

标签: 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]
        else:
            return ', '.join(field_list[:-1]) + ' & ' + field_list[-1]
    else:
        return u''

4 个答案:

答案 0 :(得分:13)

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

答案 1 :(得分:4)

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 )

有关详细信息,请参阅:http://www.diveintopython.org/power_of_introspection/index.html

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

墨菲定律:如果事情可能出错,他们会。

答案 2 :(得分:1)

等同于eval()的python是eval()

x = 9
eval("x*2")

会给你18。

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

也有效。

答案 3 :(得分:0)

要获取Python对象中所有字段的列表,您可以访问其__dict__属性。

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

test = Testing()
print test.__dict__

结果:

{'age': 30, 'name': 'Joe'}