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

标签 python list-comprehension

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

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

或者用map函数

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

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

(注意:以上所有示例都是故意错误的,仅用于表达想法)

最佳答案

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

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

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

但是请不要使用它。只需使用一个循环。我怀疑您是否会注意到效率上的任何差异,而且循环要清晰得多。

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

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

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

关于python - 以列表理解方式更新对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16650369/

相关文章:

python - 使用嵌套列表理解来检查和更改数据框的所有列

python - 是否可以在 Google App Engine 上为 iPhone 应用程序安装 SSL?

python numpy range() 和 sum(-1)

Python pandas dataframe 从列中选择行

python - 如何获取和修改嵌套字典的值?

python - 如何按顺序将值附加到列表中的每个元组?

Python3 帮助确定动态创建列表的大多数 pythonic 方法

python - 在 Ubuntu 15.04(64 位)中将 Python 3.4.3 升级到 Python 3.6.1

python - 如果你不分配它,列表理解的效率如何?

python - 为什么以下列表理解在 Python 中不起作用?