一起看一下Python2.x和Python3.x的重要区别
写于 2018-03-21 | 分类于 编程
python2在2020年就停止支持了,之前写的项目都是用的python2.7,现在在用python3.5,今天花点时间整理了一下python2.x和python3.x的重要区别
统一了字符编码支持
- Python3.x源码文件默认使用utf-8编码
# 现在可以这样写啦 中国 = 'china' print(中国) # china
增加了新的语法
- print和exec等成为了函数
print 'Hello, World' # python2.x print('Hello, World') # python3.x
- 格式化字符串变量
- 类型标注
- 添加了
nonlocal
关键词,使用nonlocal x
可以直接指派外围变量 - 添加
yield from、async/await、yield for
关键词 - 添加
__annotations__、__context__、__traceback__、__qualname__
等方法
修改了一些语法
去掉了一些语法
- 去掉了cmp
!=
代替了<>
range
包含了xrange
- 不再有经典类
增加了一些新的模块
concurrent.futures
venv
unittest.mock
asyncio
selectors
typing
修改了一些模块
- 主要对模块添加函数、类、方法或者参数
模块改名
- 把一些相关的模块放进同一个包里面
httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib
放进了http里面urllib, urllib2, urlparse, robotparser
放进了urllib
里面SocketServer
改成了socketserver
Queue
改成queue
去掉了一些模块或者函数
- 去掉了
gopherlib, md5, contextlib.nested, inspect.getmoduleinfo
等
做了一些优化
- 重新实现了dict可以减少20%-25%的内存使用
- 提升pickle序列化和反序列化的效率
collections.OrderedDict
改用C实现- 通过
os.scandir
对glob()及iglob()进行优化,使得大概快了3-6倍
其他不太需要关心的
- 构建过程、C的API、安全性等方面的修改