在Python 3中,列表推导是`list(generator expression)`的语法糖吗?
- 论坛
- 在Python 3中,列表推导是`list(generator expression)`的语法糖吗?
18 浏览
在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文档的新特性中也提到了这一点,但措辞有些模糊:
还要注意,列表推导式具有不同的语义:它们更接近于在列表()构造函数内部的生成器表达式的语法糖,特别是循环控制变量不再泄漏到周围的作用域中。