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

2024-04-19 21:10:43 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

或使用map函数

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

如果没有与属性设置循环,是否可以实现?

(注:以上示例均为故意错误,仅为表达观点而提供)


Tags: 对象函数namein示例map列表for
1条回答
网友
1楼 · 发布于 2024-04-19 21:10:43

归根结底,赋值是一个“语句”,而不是“表达式”,因此它不能用于lambda表达式或列表理解。你需要一个常规函数来完成你正在尝试的事情。

有一个内置函数将执行此操作(返回None的列表):

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

但请不要用它。只要使用一个循环就行了。我怀疑你会注意到任何效率上的差异,而且循环更加清晰。

如果你真的需要一个1行程序(虽然我不知道为什么):

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

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

相关问题 更多 >