环境:Python 2.x
语法:::列表推导中 | 生成器表达式 | 集合推导 | 字典推导::
操作:for 关键词之后的赋值操作
影响:上下文中的同名变量
Python 2.7.10 (default, Aug 17 2018, 19:45:58)
[GCC 4.2.1 Compatible Apple LLVM 10.0.0 (clang-1000.0.42)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> x = 'abc'
>>> y = [x for x in '123']
>>> x
'3'
>>> y
['1', '2', '3']
同样的情况,在 Python 3.x 的环境下,不会发生。
WHY:Python3 中这些语法都有自己的::局部作用域::,就像函数似的。
Python 3.7.0 (default, Sep 18 2018, 18:47:22)
[Clang 9.1.0 (clang-902.0.39.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> x = 'abc'
>>> y = [x for x in '123']
>>> x # x 的值被保留了
'abc'
>>> y # 列表推导也创建了正确的列表
['1', '2', '3']
PS:列表推导:构建::列表::的快捷方式;生成器表达式:创建其他任何类型的序列。
PSS:列表推导 & 生成器表达式 ”::更具可读性::”《fluent python》中推荐使用,使用的原则:只用列表推导来创建新的列表,并且尽量保持简短,最好不超过两行。