【发布时间】:2020-06-25 12:15:24
【问题描述】:
我开始工作并在数据分析方面更加熟悉 Python,并且刚刚了解了我认为非常优雅的列表推导。
虽然我知道以牺牲可读性为代价过分爱上它的风险,但我真的没有找到任何指导或经验法则来说明何时或何时不使用它。
在我自己的代码中,我在递归函数中使用了这个生成器表达式 --> find_children() 是一个用户定义的函数来创建分层数据
(find_children(ancestor) for ancestor in parents if len(parents) > 0)
而不是
if len(parents) > 0:
for ancestor in parents:
find_children(ancestor)
它看起来更整洁,但这实际上是我的唯一原因。
因此,我想收集一些经验丰富的 Pythonista 的意见以及他们对此的方法或最佳实践是什么。
【问题讨论】:
-
不要仅仅为了调用函数的副作用而使用可迭代对象。
-
脱离上下文,你的生成器表达式不会做任何事情,因为你没有迭代它。它只是创建了一个生成器,它会立即被丢弃,而无需调用
find_children。 -
当你想要一个列表时使用列表推导,而不是当你只想将普通的
for循环压缩到一行时。 -
好的,所以如果代码很简单,如果为了创建单行代码,你就不要这样做,我理解。在我的示例中,它确实与下面的 sn-p 有效地做同样的事情。它更像是一个程序而不是一个函数,不返回任何东西。
-
您从列表理解到常规
for循环的翻译不正确。列表理解中的(可选)if过滤来自可迭代对象的输出。见这里:stackoverflow.com/a/15474952/1643973
标签: python lambda list-comprehension generator-expression