是否有方法在具有多个属性的用户定义Python对象列表上迭代和调用函数?假设它被称为Entry,带有属性名称和年龄。
这样我就可以说一些的效果
def func(name, age):
//do something
def start(list_of_entries)
map(func, list_of_entries.name(), list_of_entries.age())
//but obviously the .name and .age of the object, not the iterable
//these are the only two attributes of the class
曾考虑过使用functools.partial(),但不确定在这种情况下是否有效。
我想您可以使用lambda函数:
>>> def start(list_of_entries):
... map((lambda x:func(x.name,x.age)), list_of_entries)
但为什么不使用循环呢?:
>>> def start(list_of_entries):
... for x in list_of_entries: func(x.name, x.age)
或者如果您需要func:的结果
>>> def start(list_of_entries):
... return [func(x.name, x.age) for x in list_of_entries]
您可以使用operator.attrgetter()来指定几个属性,但显式列表理解更好:
results = [f(e.name, e.age) for e in entries]
如果name和age是仅有的两个属性,则可以使用vars。否则,将**kwargs添加到您的函数中,并忽略其余部分。
def func(name, age, **kwargs):
//do something with name and age
def start(list_of_entry):
map(lambda e: func(**vars(e)), list_of_entry)