Python2.x与Python3.x差异整理(持续更新...)

2018年3月从Python2迁移到Python3,之前对版本的差异仅限于简单的 print 以及中文编码上,趁这一次在看《Fluent Python》把二者之间的一些区别做个整理。同时,将中英文的Python术语回忆对照一下。

Python3的列表推导式不会再有变量泄露的问题

在Python2.x中,在列表推导中for关键词之后的赋值操作可能会影响列表推导上下文中的同名变量。代码示例如下:

Python 2.7.6 (default, Mar 22 2014, 22:59:38) [GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> x = "my precious"
>>> dummy = [x for x in "ABC"]
>>> x
'C'

上例中,变量x的值在执行了列表推导式之后被修改为 'C', 这种情况在Python3.x中就不存在了。
列表的推导式、生成式,以及类似的字典、元组的推导和生成,现在都拥有属于自己的局部变量,和函数类似。表达式中的变量赋值是局部的,其上下文中仍可以对同名变量进行引用,不会受到局部变量的影响。Python3的运行结果如下:

>>> x = 'ABC'
>>> dummy = [ord(x) for x in x]
>>> x
'ABC'
>>> dummy
[65, 66, 67]

你可能感兴趣的:(Python2.x与Python3.x差异整理(持续更新...))