【Python】Python2与Python3的不同

前言

Python作为一种了解各种语言的胶水语言,以其自身优势在系统开发、web开发、网络爬虫、数据挖掘、深度学习等多方面均有广泛使用,Python也有其特殊之处:Python2.x与Python3.x并不兼容,这篇文章就是介绍Python的两个版本之间的不同。

编码

Python3源码文件默认使用utf-8编码,因此,如下代码合法:
>>> 中国 = 'china'
>>> print(中国)
china

字符串与Unicode

Python2中,字符串默认是字节字符串,而在Python3中是Unicode字符串。Python3行为可以通过下面命令导入到Python2中。
from __future__ import unicode_literals
同时,字节字符串与文本字符串的名称不同。在Python2中,str类用于表示字节字符串,unicode类用于表示文本字符串。在Python3中,则变为bytes与str。这意味着名称为str的类在两个版本中都存在,但代表着不同意义。

Print函数

从Python2到Python3,Python改变了print的工作机制。在Python2中,print是一个特殊语句,如下所示:
print 'Hello World'
默认情况下,print会写到sys.stdout并在字符串结尾附加\n,然而,print可以通过使用特殊语法>>打印到其他地方,如下:
import sys
print >> sys.stderr,'Hello World!'
在Python3中,print成为一个函数,这个函数接受一个名为file的关键字参数,其默认值为sys.stdout,如下:
import sys
print('Hello World!',file=sys.stderr)
另外,新的print函数也更加灵活,可以通过使用end关键字参数来改变默认在字符串结尾附加的\n的行为。
Python3的print函数在Python2.x的__future__模块中可用,使用如下:
from __future__ import print_function

除法

在Python2中,除法(/)操作符用于两个整型数,返回int类型,为了避免无法整除的现象,只能使用小数点使得被除数为float型,如下:
>>> 4/2
2
>>> 5/2
2
>>> 5.0/2
2.5
而Python3则通过整数除法总是返回float型修复了这个行为,如下:
>>> 4/2
2.0
>>> 5/2
2.5