在 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/