py2和py3中的列表表达式

py2

$ python
Python 2.7.10 (default, Jul 12 2017, 17:36:49)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> [a for a in range(3)]
[0, 1, 2]
>>> a
2

py2 中的列表生成式是不会有作用域(scope)的。
所以列表生成式之后,变量 a 仍然可用。

py3

$ python
Python 3.6.1 (default, Jul 12 2017, 18:43:57)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> [a for a in range(3)]
[0, 1, 2]
>>> a
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined

py3 中的列表生成式做了修改,和生成器表达式一样会有作用域(scope)的。
所以列表生成式之后,变量 a 不可用。

比较阅读:

生成器表达式在py2和py3 的比较:

py2

>>> (a for a in range(3))
<generator object <genexpr> at 0x7f1aed2cc0f0>
>>> a
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined

py3

>>> (a for a in range(3))
<generator object <genexpr> at 0x7f95651630a0>
>>> a
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined

生成器表达式在py2和py3中,都有作用域。所以访问表达式中的变量a, 就会提示没有定义。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容