python3引入了一系列向后不兼容的变更。大多数不兼容的地方主要是:移除二义性和错误修正。
1.字符串类型
python中有两种字符类型:字节字符串和文本字符串。
版本 | python2 | python3 |
字节字符串 | str | bytes |
文本字符串 | Unicode | str |
python2中默认的字符串类型默认是ASCII,python3中默认的字符串类型是Unicode。
3.print
python2中,print是个特殊语句,python3中print是函数。
python2:print 'hello word!'
python3:print('hello word!',file=sys.stderr)
4.除法/
python2中/的结果是整型,python3中是浮点类型。
5.导入
python2中的包导入顺序:标准库—相对倒入(即当前目录)—绝对导入(sys.path)
python3中的包导入顺序:标准库—绝对导入(如果想要相对导入,使用from .moudel)
6.类
python2中默认类是旧式类,需要显式继承新式类(object)来创建新式类。
python3中完全移除旧式类,所有类都是新式类,但仍可显式继承object类。
7.元类声明
python2中声明元类:__metaclass__ = MetaClass
python3中声明元类:class newclass(metaclass=MetaClass):pass
8.异常
python2中引发异常:raise ValueError,'Invalid value'
python3中引发异常:raise ValueError('Invalid value')——在python2中也生效
9.处理异常
python2中处理异常:
try:
raise ValueError,'Invalid value'
except ValueError,e:
pass
python3中处理异常:
try:
raise ValueError,'Invalid value'
except ValueError as e:#在python2中也生效
pass
python2中异常链会丢失原始异常信息,即:处理B异常时引发了A异常,B异常信息会丢失。
python3中将原始异常信息赋值给__context__属性。并且可以显式指定一个异常作为另一个异常的子句:raise DatabaseError() from IOError()
10.字典
python2中的dict类中的keys、values和items均返回list对象,iterkeys、itervalues和iteritems返回生成器对象。
python3中移除了list、只返回一个生成器的对象,只保留视图(生成器),但方法名为:keys、values和items。
11.模块合并
python2中的StringIO和cStringIO合并为python3中的io
python2中的pickle和cPickle合并为python3中的pickle。
python2中的urllib、urllib2和urlparse合并为python3中的urllib
12.重命名模块
python3 | python2 |
---|---|
Configparser | ConfigParser |
filter | itertools.ifilter |
input | raw_input |
map | itertools.imap |
range | xrange |
functools.reduce | reduce |
socketserver | SocketServer |
zip | itertools.izip |