预计 Python 2 到 2020 年 4 月 12 日就不再维护了,Python 2 将停止所有的更新,包括安全性更新。
编码
Python 2 中,默认编码是 asscii,asscii编码是应用于拉丁字母的编码系统,程序内用中文常导致出现编码问题。在Python 3 中采用了 UTF-8 作为默认编码,UTF-8属于unicode编码,支持大多数语言,且可变长度,空间较为节省。在Python 3 中写代码再不用声明# -*- coding: utf-8 -*-
在Python3 中以下代码是合法的,但最好不要这样写,还是让代码看起来规范一些好。
print 函数
print 语句被 Python3 废弃,统一使用 print 函数,意味着在Python 3中必须使用括号将需要输出对象括起来。
Python 2.6+版本部分地支持这种形式的print语法。在Python 2.6+版本中,如下三种形式是等价的。
但在Python 3中以Python 2的形式不带括号使用print函数时,会触发SyntaxError,如下。
除法运算
在 Python 2 中若为两个整形数进行除法运算,结果为整数,把小数部分完全忽略掉,但若两个数中有一个为浮点数,则结果为浮点数,如下。
在 Python 3 中为真除法,运算结果不受参加运算的数的类型影响,都是浮点数,如下。
不等运算符
Python 2中不等于有两种写法 != 和 <>,如下。
Python 3中删除了<>,只有!=一种写法,如下。
round
Python 2,round 函数返回 float 类型值,如下。
Python 3,round 函数返回 int 类型值,如下。
xrange
xrange 函数被 Python 3 废弃,统一使用 range,Python 3 中 range 的机制也进行修改并提高了大数据集生成效率,如下。
在Python 3 中,使用 xrange 抛出NameError异常,如下,如下。
同时Python 3 中range函数返回的是可迭代对象,可以通过list()函数转成列表。
file()
file 函数被 Python 3 废弃,统一使用 open 来处理文件,可以通过 io.IOBase 检查文件类型,如下。
Python 3 中使用file 函数抛出NameError异常,如下。
has_key()
字典变量的 has_key 函数被 Python 3废弃,统一使用 in 关键词,如下。
Python 3 中使用has_key 抛AttributeError异常,使用in关键字代替,如下。
同时,在Python 3 中字典的keys()、values()、items() 不再返回列表,但是可以通过 list 强行转换,如下。
函数式编程map、filter
在 Python 2中 map、filter 返回的是列表,如下。
在 Python 3中 map、filter 返回的迭代器,但可以通过list转换成列表,如下。
同时迭代器 iterator 的 .next()函数被 Python 3 废弃,统一使用 next(iterator)。
For循环变量与全局命名空间泄漏
在Python 2中,for 循环会修改外部相同名称变量的值,如下。
在Python 3中,for循环中的变量不再会泄漏到全局命名空间中了,如下。
异常处理
在 Python 3 中处理异常也轻微的改变了,在 Python 3 中我们现在使用 as 作为关键词。捕获异常的语法由 except exc, var 改为 except exc as var,如下。
经典类
Python 2 中存在经典类和新式类,Python 2中,默认都是经典类,只有显式继承了object才是新式类,在Python 3中取消了经典类,默认都是新式类,并且不必显式的继承object。