在Python 3中,列表推导是`list(generator expression)`的语法糖吗?

18 浏览
0 Comments

在Python 3中,列表推导是`list(generator expression)`的语法糖吗?

在Python 3中,列表推导式是否只是将生成器表达式作为参数传递给list函数的语法糖?

例如,下面的代码:

squares = [x**2 for x in range(1000)]

实际上是在后台将其转换为以下形式吗?

squares = list(x**2 for x in range(1000))

我知道输出是相同的,并且Python 3修复了列表推导式对周围命名空间的意外副作用,但就CPython解释器在内部执行的操作而言,前者是否转换为后者,或者在代码执行方式上是否有任何差异?

背景:

我在这个问题的评论部分发现了这种等价的说法,而快速的谷歌搜索也显示了这里也有同样的说法。

Python 3.0文档的新特性中也提到了这一点,但措辞有些模糊:

还要注意,列表推导式具有不同的语义:它们更接近于在列表()构造函数内部的生成器表达式的语法糖,特别是循环控制变量不再泄漏到周围的作用域中。

0