Python 即将达到下一个重要里程碑,即发布 3.6 版本。Python 3.6 预计于12 月16 日发布,该版本推出许多新功能,包括更快、更小巧的词典,改进的asyncio 模块以及新的文件系统路径协议等。
Python 3.6 改进了 dict 类型, 使其内存使用量与 Python 3.5 相比减少了 20%~25%。这是通过使用一个类似于PyPy 的新表示实现的,并且也优化了其垃圾回收性能。
Python 的新版本更容易定制子类创建,这归功于一个新的__init_subclass__classmethod,当我们创建子类时,就在基类上调用它:
class PluginBase: subclasses = [] def __init_subclass__(cls, **kwargs): super().__init_subclass__(**kwargs) cls.subclasses.append(cls) class Plugin1(PluginBase): pass class Plugin2(PluginBase): pass
这种新机制更加便于使用,能够替代原先存在的元类机制来定制基类创建。
在标准库方面,有几个改进的或新的模块值得一提: asyncio 模块不再是临时的,并且它的 API 具有稳定性。新的保密模块旨在提供能可靠地生成保密性很强的伪随机值的方法,例如生成那些用于处理账户认证、代币等的伪随机值。此外,支持输入提示规范的输入模块也已公开宣称稳定了。
Python 3.6 中的其他新功能还包括:
通过格式化的字符串字面量 (string literals)插入字符串,如下例所示:
>>> name = "Fred" >>> f"He said his name is {name}." 'He said his name is Fred.' >>> width = 10 >>> precision = 4 >>> value = decimal.Decimal("12.34567") >>> f"result: {value:{width}.{precision}}" # nested fields 'result: 12.35'
在数字之内使用下划线,这使我们可以像下面的例子这样写:
>>> 1_000_000_000_000_000 1000000000000000 >>> 0x_FF_FF_FF_FF 4294967295
通过去除了对 await 和 yield 不能在同一个函数体中使用的约束,异步生成器已成可能:
async def ticker(delay, to): """Yield numbers from 0 to *to* every *delay* seconds.""" for i in range(to): yield i await asyncio.sleep(delay)
异步列表推导,如下例所示:
result = [i async for i in aiter() if i % 2]
您可以在 what’s new 文档中查阅 Python 3.6 中的新功能和改进功能的完整列表。
查看英文原文: Python 3.6 Brings Better Dictionaries, Improved Async I/O, and More
感谢冬雨对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ , @丁晓昀),微信(微信号: InfoQChina )关注我们。
评论