以列表解析方式更新对象属性

时间:2013-05-20 13:13:55

标签: python list-comprehension

在Python中,是否可以更新列表推导中的对象列表或类似的方式? 例如,我想设置列表中所有对象的属性:

result = [ object.name = "blah" for object in objects]

map功能

result = map(object.name = "blah", objects)

如果没有使用属性设置进行循环,是否可以实现?

(注意:以上所有示例都是故意错误的,只是为了表达这个想法而提供)

1 个答案:

答案 0 :(得分:23)

最终,赋值是“语句”,而不是“表达式”,因此它不能用于lambda表达式或列表推导。你需要一个常规的功能来完成你正在尝试的东西。

有一个内置的功能(返回None列表):

[setattr(obj,'name','blah') for obj in objects]

请不要使用它。只需使用一个循环。我怀疑你会注意到效率的任何差异,循环更清晰。

如果你真的需要1班轮(虽然我不明白为什么):

for obj in objects: obj.name = "blah"

我发现大多数人都想使用列表推导,因为有人告诉他们“快”。这是正确的,但仅用于创建新列表。使用列表理解副作用不太可能带来任何性能优势,并且您的代码在可读性方面会受到影响。实际上,使用列表推导而不是使用.append的等效循环的最重要原因是因为它更容易阅读。