BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Python 3.6推出更好的词典,改进的Async I/O模块等诸多新功能

| 作者 Sergio De Simone 关注 17 他的粉丝 ,译者 Alina 关注 0 他的粉丝 发布于 2016年12月21日. 估计阅读时间: 4 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

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)关注我们。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

一些小问题 by Chen Damon

原文有一些小问题,所以译文也有一些小问题:

官方,对异步生成器中函数体内的约束针对的是await和yield的关系,不是await和async。3.6解禁。

异步的内含物:翻译为 异步列表推导 可能更为恰当一些。


dict,官方说大约有20%~25%的压缩比例。参考的pypi的文章(morepypy.blogspot.com/2015/01/faster-more-memor...

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

1 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT