【问题标题】:Python Zen - (only) one way to do it [duplicate]Python Zen - (仅)一种方法[重复]
【发布时间】:2014-02-04 23:55:16
【问题描述】:

这个问题可能听起来很主观,但正如“禅宗”所说,有(几乎总是)一种首选方法,它最终不应该是主观的。

哪种方式更好?

[i.something() for i in l]
map(operator.methodcaller('something'), l)
map(lambda x: x.something(), l)

(1) (IMO) 非常清楚,但在许多答案中,使用了map()。如果我们这样做,则 (2) 和 (3) 之间的可读性几乎相同(至少在 IMO)。

对于许多其他任务同样重要,但我选择了这个,因为它可以代表所有类似的任务。

【问题讨论】:

  • 假设.something() 不会以任何方式修改i 是否安全?
  • 总是列出理解。

标签: python zen-of-python


【解决方案1】:
  • 简单胜于复杂。
  • 可读性很重要。

两者都是[i.something() for i in l] 的明确论据。

这假设 .something() 不会变异 i,并且您使用的是 Python 2。

【讨论】:

  • 那么,如果该函数发生变异,应该首选哪个?
  • @thefourtheye:以上都不是。在这种情况下,最好使用明确的for 循环:for item in l: item.something()。使用列表推导或maps 来处理副作用是丑陋的。
  • 如果你想要一个返回值的列表,列表理解比显式的 for 循环更好。推论:方法应该改变一个实例或返回一些有用的东西,在一个方法中同时做这两个不太好。
  • @RemcoGerlich:是的,这就是我做出这个假设的原因。但你永远不知道...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-10
  • 1970-01-01
  • 2012-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多