2015 年 9 月 13 日,Python 3.5 正式发布。该版本引入了很多新特性,比如支持 async/await 异步编程,改进了对 Python Zip 应用的支持,引入了一个加载扩展模块的改进机制等。
语法方面的变化主要有三点:
- PEP 492 :支持 async/await 语法的协程
PEP 492 极大改进了 Python 中对异步编程的支持,增加了 awaitable 对象(可以是协程或者带有 __await__() 方法的对象)、协程函数、异步迭代和异步上下文管理器等内容。
协程函数用新的async def 语法声明:
>>>async def coro(): ... return 'spam'
CPython 实现的改进:
- 不再使用.pyo 文件,而是引入了一种更灵活的替代机制,.pyc 文件可以表示优化和未优化的字节码。优化级别信息可以包含在.pyc 文件的名字中,具体可参见 PEP 488 。
- 重新设计了内置和扩展模块的加载机制,具体可参见 PEP 489 。
标准库也有重要改进:
- collections.OrderedDict 现在是用 C 实现的,速度可以提升 4 到 100 倍。
- 新的 os.scandir() 函数,支持更快速地遍历目录。
- functools.lru_cache() 大部分用 C 重新实现了,带来了更好的性能。
安全方面的改进:
- 标准库中默认关闭了 SSLv3,不过仍然支持手动开启。
- HTTP cookie 解析更为严格,以防止可能出现的注入攻击。
更多新特性,可以参考相关文档。
另外,在10 月15~17 日的 QCon 上海 2015 上,国内著名的 Python 专家赖勇浩将分享《探索 Python 3.5 中 async/await 特性的实现》。async/await 特性使得 Python 具备语法级别的协程支持,也让它有了更容易理解和交流的异步编程模型。那么,这个特性在虚拟机里是如何实现的呢?是否用了什么很特别的机制?跟之前的 yield/yield from 有何异同?敬请期待。
评论