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 "", line 1, in 
NameError: name 'a' is not defined

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

比较阅读:

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

py2

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

py3

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

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

你可能感兴趣的:(py2和py3中的列表表达式)