Python 3.5.0在9月13号正式发布,与3.4相比,有哪些让人期待的新特性呢?(Note:本文首发在CSDN,禁止任何形式的转载)
- PEP441,优化Python对zip压缩包的支持。从2.6版本开始,Python支持将文件或zip形式的压缩包作为脚本执行,对于有必要作为一个文件发布又复杂到要分模块管理的应用来说,这个功能很实用。但是这个功能却鲜有人知,原因之一是当时没有很好地宣传,只在What’s New中提到,没有写到文档中;原因之二是Windows没有为这种形式的文件(.zip)提供相应地Python扩展名(类似.py)。所以这一次的版本中重新发布了这个特性,并且,定义
.pyz
和.pyzw
作为“Python的zip应用”和“Windows下Python Zip应用”的扩展名,并提供了一个简单的管理工具。 - PEP448,解包操作更加方便。
*
作为可迭代的解包操作符,**
作为字典的解包操作符。list,tuple等数据结构通过解包操作会得到分散的对象,例如,*range(4), 4
结果得到(0, 1, 2, 3, 4)
。 - PEP461,
%
操作符支持对字节和字节数组的格式化。 - PEP465,新增矩阵乘法运算符’@’。
a @ b
表示矩阵a乘矩阵b,也支持a @= b
。 - PEP471,新增
os.scandir()
,能够快速遍历目录。 - PEP475,提供系统调用中断时自动重试的支持。
- PEP479,
StopIteration
异常改在生成器内部处理。现在如果生成器raise一个StopIteration
,将会替换为RuntimeError
。因为这个特性不能向前兼容,所以最初是以__future__
的形式发布的。 - PEP484,新增typing模块,类型注释的新标准。支持通过
def greeting(name: str) -> str:
这种形式声明函数,来注释输入和输出地数据类型。 - PEP485,新增
math.isclose()
,来判断近似相等。 - PEP486,优化Windows平台对
virtualenv
的支持。在Windows中Python如果安装了virtualenv或者多版本共存的话,需要配置解释器的路径来指定一个解释器执行,但是并不会区分虚拟环境还是系统环境,如果使用pip等命令行,影响的还是系统环境。本PEP使系统能感受到“虚拟环境的存在”,也就说如果没有特别指定解释器,Windows中运行Python命令的时候会影响活跃的virtualenv,如果没有,再调用默认的Python。 - PEP488,不再使用
.pyo
文件名。扩展.pyc
,如果添加优化参数,字节码文件同目录下生成.pyc
将会使优化后的版本,文件中会保存优化级别。 - PEP489,优化内置模块和扩展模块的加载。
- PEP492,支持
async/await
语法的协程。优化了Python的异步,添加了awaitable object 、协程函数、异步迭代和异步上下文管理器等。
其他CPython的优化
- 当
LC_TYPE locale
是POSIX locale
(C locale
)时,sys.stdin
和sys.stdout
用surrogateescape
错误处理器,不再使用strict
错误处理器。
标准库重要优化
- collections.OrderedDict用C重写,速度提高4-100倍。
- ssl模块支持 Memory BIO
- 新增
os.scandir()
函数。 functools.lru_cache()
用C重写,性能大大提升。- 新函数
subprocess.run()
使运行subprocesses
更快。 - traceback模块优化,性能更高,对开发者更加友好。
安全优化
- 标准库禁用SSLv3.
- HTTP cookie,解析更加严格,以阻止潜在的注入攻击。
Windows优化
- Windows新安装器,替换MSI.
- Windows构建以及扩展模块现在使用Microsoft Visual C++ 14.0。
反馈
- redsymbol说,Python3变得越来越好了,他使用3比2多三年,并深深地爱上了Python3.有时候不得不用2.7,就会感觉从第五代工具回到了二代。 对此有人反驳说,是“从二代回到五代”吧,Python3没有参数列表自解(parameter tuple unpacking by itself),用起来感觉非常不友好。orf对此回应:我用了7年多Python都不知道这玩意是什么,也没在代码中见过,移除难用的feature是一大进步,如果你接受不了的话,我很抱歉。Py3 is awesome.(跟帖中有一大堆关于这个feature的讨论)
- “你们搞的这个typing模块啊,excited!”ricw提到,这个模块解决了Python最大的软肋,以后Python会变得越来越专业化。
- ceronman说这是他最喜欢的3.X版本,Typing注释模块,async/await,解包广泛应用,这些功能都很赞,遗憾是PEP0498没有赶上这个版本,期待3.6(原帖又是长长的对这一feature的讨论).
- 如果所有的东西都兼容Py3,这个世界就完美了 :)。