写点什么

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

  • 2016 年 12 月 20 日
  • 本文字数:1044 字

    阅读完需:约 3 分钟

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

2016 年 12 月 20 日 18:002470
用户头像

发布了 22 篇内容, 共 41808 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

电商秒杀系统

feitian

Vue3 + TypeScript 开发实践总结

程序员海军

大前端 Vue3 引航计划

JavaScript 脚本优化的 10 个技巧

devpoint

JavaScript 性能优化 10月日更

架构实战营 模块九 作业

脉醉

架构实战营

自我提升:高效能人士的7个习惯学习笔记

程序员架构进阶

自我管理 自我提升 10月日更

模块九作业

VE

架构实战营

中国法定数字货币(DCEP)全面启航!全国普及势在必行

CECBC

从头开始(概率)学HMM:精讲第二课-学习问题(BW算法)

herosunly

AI 引航计划 内容合集

如虎添翼!6款备受欢迎的Edge浏览器插件

Jackpop

从头开始(概率)学HMM:精讲第三课-概率计算问题

herosunly

AI 引航计划 内容合集

原创万字总结人工智能技术栈与学习路线 下集 进阶篇

cv君

AI 引航计划

924清退在即,你的币转入数字货币钱包了吗?

CECBC

数据库:B/B+树

正向成长

B+树 B树

仁兄,可曾听闻OpenVINO

cv君

AI 引航计划

【设计模式】第一篇 - 组合模式

Brave

组合模式 10月日更

从头开始(概率)学HMM:精讲第四课-预测问题(维特比算法)

herosunly

AI 引航计划 内容合集

设计电商秒杀系统

gawaine

架构训练营

浅谈人工智能的历史

Nydia

推荐2个网站,牛x就完事了!

Jackpop

决策树——从原理走向实战

cv君

AI 引航计划

【布隆过滤】大数据+查重过滤+爬虫领域精选算法

cv君

AI 引航计划

自定义Vue脚手架模板之:Vue-Cli源码分析

Brave

源码 vue cli 10月日更

从头开始(概率)学HMM:精讲第五课-EM算法

herosunly

AI 引航计划 内容合集

uni-app 在mac电脑连接安卓手机进行真机调试

达摩

uni-app app调试

为什么赛博朋克里总少不了日本元素?

脑极体

从头开始(概率)学HMM:精讲第一课-隐马尔可夫模型定义

herosunly

AI 引航计划 内容合集

linux之history使用技巧

入门小站

Linux

原创万字总结人工智能技术栈与学习路线 上集 基础篇

cv君

AI 引航计划

在线HTTP请求/响应头转JSON工具

入门小站

工具

AI驱动!7款开发者必备生产力工具

Jackpop

基于深度学习的医学图像分割(一)

cv君

AI 引航计划

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