为什么python列表理解有时会受到冷遇?

2024-03-28 13:51:06 发布

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

我遇到的许多开发人员建议,最好使用简单的循环和if条件,而不是单行列出理解语句。在

我总是发现它们非常强大,因为我可以在一行代码中容纳大量代码,并且可以避免创建大量变量。为什么它仍然被认为是一种不好的做法?在

(慢吗?)在


Tags: 代码if开发人员语句条件建议单行
3条回答

列表理解用于创建列表,例如:

squares = [item ** 2 for item in some_list]

For循环更适合于使用列表元素(或其他对象)执行某项操作:

^{pr2}$

使用理解来理解它的副作用,或者使用for循环来创建列表,通常是不受欢迎的。在


这里的一些其他答案主张,一旦理解变得太长,就把它变成一个循环。我认为这不是一个好的风格:创建列表所需的append调用仍然很难看。相反,重构为函数:

def polynomial(x):
    return x ** 4 + 7 * x ** 3 - 2 * x ** 2 + 3 * x - 4
result = [polynomial(x) for x in some_list]

只有当你关心速度-而且你已经完成了你的分析!–你应该保留长的,不可读的列表理解。在

这还不算坏。在

但是,请列出

  1. 有副作用,或
  2. 作为多行for循环更具可读性

一般人都不赞成。在

换句话说,可读性很重要。在

作为第一个坏例子的一个过分做作的例子:

x = range(10)
[x.append(5) for _ in xrange(5)]

基本上,如果不存储结果,并且/或它修改了其他对象,那么列表理解可能是个坏主意。在

作为第二个例子,我们来看看几乎所有用python编写的代码golf条目。一旦你的列表理解开始变得不可读,考虑使用for循环。在

性能没有受到影响(即使有,我也不会担心;如果性能如此重要,你就错了语言)。有些人不赞成清单的理解,因为它们对某些人来说过于简洁,这是个人喜好的问题。一般来说,我发现简单的列表理解比它们的循环/条件等价物更具可读性,但是当它们开始变长(例如,你开始超过80个字符),它们可能会被一个循环代替。在

相关问题 更多 >