Python,将变量值作为变量进行求值
我想做如下事情:特别是“f.eval(field)”部分,它将变量的值作为字段名进行计算。如何在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
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 )