Python 3.5发布:新增模块,性能优化,对开发者更友好

472 查看

Python 3.5.0在9月13号正式发布,与3.4相比,有哪些让人期待的新特性呢?

  • 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,提供系统调用中断时自动重试的支持。
  • PEP479StopIteration异常改在生成器内部处理。现在如果生成器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 localePOSIX locale(C locale)时,sys.stdin 和sys.stdout 用surrogateescape错误处理器,不再使用strict错误处理器。

标准库重要优化

安全优化

  • 标准库禁用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,这个世界就完美了 :)。