专栏名称: Python中文社区
致力于成为国内最好的Python开发者学习交流平台,这里有关于Python的国内外最新消息,每日推送有趣有料的技术干货和社区动态。 官方网站:www.python-cn.com
目录
相关文章推荐
Python开发者  ·  突发!OpenAI 紧急上书,呼吁禁用 ... ·  3 天前  
Python开发者  ·  董事长刺死CTO(2):董事长早就写好复仇名 ... ·  4 天前  
Python爱好者社区  ·  董事长。。。刺死。。。技术总监。。。已被捕。。。 ·  3 天前  
Python爱好者社区  ·  北京大学第四弹:DeepSeek私有化部署和 ... ·  2 天前  
Python中文社区  ·  金钱永不眠:量化交易中的马丁格尔策略 ·  3 天前  
51好读  ›  专栏  ›  Python中文社区

Python3.6新特性官方文档中文版

Python中文社区  · 公众号  · Python  · 2016-12-25 22:28

正文

因为微信公众号文章有20000字数的限制,本文仅节选部分,查看全部译文请进入:

知乎专栏: Python中文社区

PyCN技术评论 (点击阅读原文即可进入,网址:https://pycntech.github.io/)

原文: What’s New In Python 3.6
翻译团队:
Py字幕组
首发刊物:
PyCN技术评论 (点击菜单栏:社区-刊物进入)
Github:
https://github.com/PyCN/PTR

由阿橙( @sinoandywong )召集,Ele( @ictar )、苍冥( @eastrd )组织翻译。

译者:
eastrd :苍冥
ictar :Ele
linchart
szthanatos
alex-marmot
heyuanree
sinoandywong :阿橙
sxqs-yang :若木羊
zilongcc :水手
bubuyo :铲屎官
yifan1024
YoungZiyi
fuckexception
Lving
LoveSn0w
phdhorse41

特别感谢:
Ele(
@ictar ):她为本文档的翻译做了大量工作,一个热爱美食的菇凉。
Py字幕组 :一个各路大(dou)神(bi)聚集的团队。

感谢他们所作出的工作,圣诞快乐!
2016.12.25

版本: 3.6.0
日期: December 15, 2016
编辑: Elvis Pranskevichus ,Yury Selivanov

这篇文章介绍了与3.5相比, Python 3.6中多出的新特性。

另请参阅

PEP 494 - Python 3.6 发布时间表

摘要 - 发布亮点

新的语法特性:

  • PEP 498, 格式化字符串字面量

  • PEP 515, 数字字面量中的下划线

  • PEP 526, 变量注解中的语法

  • PEP 525, 异步生成器

  • PEP 520: 异步解析式

新的库模块

  • secrets : PEP 506 - 在标准库中添加了Secrets模块

CPython实现的改进:

  • 重新实现了 字典(dict) 类型,以便能像 PyPy的字典类型 一样使用更紧凑的表达方式。与Python 3.5相比,这使字典的内存用量减少了20%到25%。

  • 用新协定优化了类的自定义建立。

  • 类属性定义顺序(class attribute definition order)现在被保留了

  • **kwargs内的元素顺序现在对应于将关键字(保留字)参数传递给函数的顺序

  • 新增了对DTrace和SystemTap probing的支持。

  • 新PYTHONMALLOC环境变量现在可用于调试解释器内存分配与访问错误。

标准库的重大改进:

  • asyncio 模块开发了新功能、显著的可用性、性能优化,以及大量的错误修复。 从Python 3.6开始,asyncio模块不再是临时的了,其API也进入了稳定状态。

  • 实现了用于支持 类路径对象(path-like objects) 的新文件系统路径协议。 所有在路径(path)上使用的标准库函数都已更新,以便适应于新协议。

  • datetime 模块已获得对本地时间消歧(Local Time Disambiguation)的支持。

  • 针对 typing 模块的一些改进,使其不再是临时模块。

  • tracemalloc 模块已重大改进,现用于为ResourceWarning提供更好的输出,并为内存分配错误提供更好的诊断。 欲知详情,请参阅PYTHONMALLOC部分。

安全相关的改进:

  • secrets模块 被用于简化那些适用于管理密文的密码学安全伪随机数生成器(cryptographically strong pseudo-random numbers)的生成过程,如认证、token等。

  • 在Linux上,现将 os.urandom() 改成了阻塞模式,直到系统的urandom的熵池(entropy pool)的初始化具有更高的安全性。 解释请参见 PEP 524

  • hashlib ssl 模块现已支持OpenSSL 1.1.0。

  • 改进了 ssl模块 的默认设置和特性集。

  • 新增了 hashlib模块 对BLAKE2、SHA-3、SHAKE哈希算法以及 scrypt() 密钥导出函数的支持。

Windows上的改进:

  • PEP 528与PEP 529,Windows文件系统和控制台的编码已更改为UTF-8。

  • 当用户没有指定版本(通过命令行参数或配置文件)时,py.exe启动器以交互方式使用时,不再以Python 2优先于Python 3。 处理shebang行的方式保持不变 - 此处的“python”依旧指Python 2。

  • python.exe和pythonw.exe已标记为长路径敏感(long-path aware),这意味着260字符路径限制可能不再适用。 有关详细信息,请参阅 删除MAX_PATH限制

  • 可以添加 ._pth 文件以强制隔离模式(isolated mode)并完全指定所有搜索路径,以避免注册表查找和环境查找。 有关详细信息,请参阅 文档

  • 一个python36.zip文件现可用作一个地标(landmark)以臆指 PYTHONHOME 。 有关详细信息,请参阅 文档

新特性

PEP 498: 格式化字符串

PEP 498 引入了一种新的字符串:_f-strings_, 或者 格式化字符串

格式化字符串带 'f' 前缀,类似于 str.format() 接受的格式字符串。它们包含了由花括号括起来的替换字段。替换字段是表达式,它们会在运行时计算,然后使用 format() 协议进行格式化:


  1.    >>> name = "Fred"

  2.    >>> f"He said his name is {name}."

  3.    'He said his name is Fred.'

  4.    >>> width = 10

  5.    >>> precision = 4

  6.    >>> value = decimal.Decimal("12.34567")

  7.    >>> f"result: {value:{width}.{precision}}"  # nested fields

  8.    'result:      12.35'

又见

PEP 498 - 字符串插值。

PEP由Eric V. Smith编写和实现。

特性文档

PEP 526: 变量注释语法

PEP 484 引入了函数参数的类型注释的标准,又名类型提示。这个PEP添加了用来注释变量(包括类变量和实例变量)类型的语法:


  1.    primes: List[int] = []


  2.    captain: str  # Note: no initial value!


  3.    class Starship:

  4.        stats: Dict[str, int] = {}

正如函数注释,Python解释器不附加任何特殊意义到变量注释上,只是将它们存储在一个类或者模块的 __annotations__ 属性中。

与静态类型语言中的变量声明相比,注释语法的目的在于提供一种简单的方式,通过抽象语法树和 __annotations__ 属性,来为第三方工具和库指定结构化类型元数据。

又见

PEP 526 - 变量注释语法。

PEP由Ryan Gonzalez, Philip House, Ivan Levkivskyi, Lisa Roach, 和Guido van Rossum编写。由Ivan Levkivskyi实现。

使用或将要使用这个新语法的工具: mypy , pytype , PyCharm等等。

PEP 515: 数值文字中的下划线

PEP 515 添加了在数值文字中使用下划线的能力,以提高可读性。例如:


  1.    >>> 1_000_000_000_000_000

  2.    1000000000000000

  3.    >>> 0x_FF_FF_FF_FF

  4.    4294967295

数字之间和任何基本符号之后允许单个下划线。不允许前置、后置或者多个连续的下划线。

字符串格式化 语言现在还支持 '_' 选项,该选项用来通知对浮点表示类型和整型表示类型 'd' ,会把下划线当成千位分隔符使用。对于整型表示类型 'b' , 'o' , 'x' , 和 'X' , 下划线将会被插入到每4个数字之间:


  1.    >>> '{:_}'.format(1000000)

  2.    '1_000_000'

  3.    >>> '{:_x}'.format(0xFFFFFFFF)

  4.    'ffff_ffff'

又见

PEP 515 - 数值文字中的下划线

PEP由Georg Brandl和Serhiy Storchaka编写。

PEP 525: 异步生成器

PEP 492 引入支持原生协程和 async / await 的语法到Python 3.5。 在Python 3.5实现里的一个值得注意的
局限性就在于它不可能使用 await 和`yield'在同一个函数体中。 而在Python 3.6中,这个限制
已解除,这使得定义 异步生成器 成为可能:


  1.    async def ticker(delay, to):

  2.        """Yield numbers from 0 to *to* every *delay* seconds."""

  3.        for i in range(to):

  4.            yield i

  5.            await asyncio.sleep(delay)

新的语法允许更快更简洁的代码。

参见
PEP 525 - 异步生成器

由Yury Selivanov撰写并实现的PEP。

PEP 530: 异步解析式

PEP 530 添加了对 async for 在list、set、dict解析式以及generator表达式中的使用支持:


  1.    result = [i async for i in aiter() if i % 2]

此外,所有解析式都支持“await”表达式:


  1.    result = [await fun() for fun in funcs if await condition()]

参见
PEP 530 - 异步解析式

由Yury Selivanov撰写并实现的PEP。

PEP 487: 用于建立类的更简单的自定义

现在可以在不使用元类的情况下自定义子类。每当创建一个新的子类时,新的 __init_subclass__ 类方法将在基类上被调用,:


  1.    class PluginBase:

  2.        subclasses = []


  3.        def __init_subclass__(cls, **kwargs):

  4.            super().__init_subclass__(**kwargs)

  5.            cls .subclasses.append(cls)


  6.    class Plugin1(PluginBase):

  7.        pass


  8.    class Plugin2(PluginBase):

  9.        pass

为了允许零参数 super() _init_subclass __() 实现中被正确的调用并工作,自定义元类必须确保新的 __classcell__ 命名空间输入传递到 type .__ new__ (如 创建类对象 )

参见

PEP 487 - 用于建立类的更简单的自定义

由Martin Teichmann撰写并实现的PEP。

功能文档

PEP 487: 描述符协议增强

PEP 487 扩展描述符协议必须包括新的可选的 __set_name __() 方法。 每当定义一个新类时,新方法将会调用定义中所有的描述符,并给它们提供定义类的引用,以及类命名空间中给予描述符的名字。 换句话说,描述符的实例现在可以获知所有者类的属性名:


  1.    class IntField:

  2.        def __get__(self, instance,







请到「今天看啥」查看全文