python3 namedtuple_Python3.9的新特性,老司机看完都惊叹不已

11b0118b5a34934e51bab9811a2332b6.png

53185a28933c4e04d513315a79932ccb.png

f972bd1047c12c5bcfe28214c6fa0348.png

摘要 - 发布重点

新的语法特性:

  • PEP 584,为 dict 增加合并运算符;

  • PEP 585,标准多项集中的类型标注泛型。

  • PEP 614,放宽对装饰器的语法限制。

新的内置特性:

  • PEP 616,移除前缀和后缀的字符串方法。

标准库中的新特性:

  • PEP 593,灵活的函数和变量标注;

  • 添加了 os.pidfd_open() 以允许不带竞争和信号的进程管理。

解释器的改进:

  • PEP 573,从 C 扩展类型的方法快速访问模块状态;

  • PEP 617,CPython 现在使用基于 PEG 的新解析器;

  • 许多 Python 内置类型(range, tuple, set, frozenset, list, dict)现在通过使用 PEP 590 vectorcall 获得了加速;

  • 垃圾回收不会因恢复的对象而阻塞;

  • 许多 Python 模块 (_abcaudioop_bz2_codecs_contextvars_crypt_functools_json_localemathoperatorresourcetime_weakref) 现在会使用 PEP 489 所定义的多阶段初始化;

  • 许多标准库模块 (audioopastgrp_hashlibpwd_posixsubprocessrandomselectstructtermioszlib) 现在会使用 PEP 384 所定义的稳定 ABI。

新的库模块:

  • PEP 615,IANA 时区数据库现在已包含于标准库的 zoneinfo 模块;

  • 图的拓扑排序实现现在已由新的 graphlib 模块提供。

发布进程的变化:

  • PEP 602,CPython 采用年度发布周期

新的特性

1. 字典合并与更新运算符

合并 (|) 与更新 (|=) 运算符已被加入内置的 dict 类。

它们为现有的 dict.update 和 {**d1, **d2} 字典合并方法提供了补充。

示例:

>>> x = {"key1": "value1 from x", "key2": "value2 from x"}>>> y = {"key2": "value2 from y", "key3": "value3 from y"}>>> x | y
{'key1': 'value1 from x', 'key2': 'value2 from y', 'key3': 'value3 from y'}>>> y | x
{'key2': 'value2 from x', 'key3': 'value3 from y', 'key1': 'value1 from x'}

新增用于移除前缀和后缀的字符串方法增加了 str.removeprefix(prefix) 和 str.removesuffix(suffix) 用于方便地从字符串移除不需要的前缀或后缀。

也增加了 bytes, bytearray 以及 collections.UserString 的对应方法。

请参阅PEP 616了解详情。(由 Dennis Sweeney 在 bpo-39939 中贡献。)

2. 标准多项集中的类型标注泛型

在类型标注中现在你可以使用内置多项集类型例如 list 和 dict 作为通用类型而不必从 typing 导入对应的大写形式类型名 (例如 List 和 Dict)。标准库中的其他一些类型现在同样也是通用的,例如 queue.Queue。

示例:

def greet_all(names: list[str]) -> None:for name in names:print("Hello", name)

请参阅PEP 585了解详情。(由 Guido van Rossum, Ethan Smith 和 Batuhan Taşkaya 在 bpo-39481 中贡献。)

改进的模块

1. concurrent.futures 

将新的 cancel_futures 形参添加到 concurrent.futures.Executor.shutdown(),可以取消尚未开始运行的所有挂起的 Future,而不必等待它们完成运行再关闭执行器。(由 Kyle Stanley 在 bpo-39349 中贡献。)

从 ThreadPoolExecutor 和 ProcessPoolExecutor 中移除了守护线程。这改善与与子解释器的兼容性及它们在关闭进程时的可预测性。(由 Kyle Stanley 在 bpo-39812 中贡献。)

现在 ProcessPoolExecutor 中的工作进程仅会在没有可重用的空闲工作进程时按需产生。这优化了启动开销并减少了由空闲工作进程导致的 CPU 时间损失。(由 Kyle Stanley 在 bpo-39207 中贡献。)

2. datetime

datetime.date 的 isocalendar() 以及 datetime.datetime 的 isocalendar() 等方法现在将返回 namedtuple() 而不是 tuple。(由 Dong-hee Na 在 bpo-24416 中贡献。)

3. ipaddress

ipaddress 现在支持 IPv6 作用域地址(即带有 % 前缀的 IPv6 地址)。

IPv6 作用域地址可使用 ipaddress.IPv6Address 来解析。作用域的区 ID 如果存在,可通过 scope_id 属性来获取。(由 Oleksandr Pavliuk 在 bpo-34788 中贡献。)

4. multiprocessing

multiprocessing.SimpleQueue 类新增了 close() 方法用来显式地关闭队列。(由 Victor Stinner 在 bpo-30966 中贡献。)

5. pprint

现在 pprint 能美化打印 types.SimpleNamespace。(由 Carl Bordum Hansen 在 bpo-37376 中贡献。)

6. random

增加了新的 random.Random.randbytes 方法:生成随机字节串。(由 Victor Stinner 在 bpo-40286 中贡献。)

7. smtplib

现在 SMTP 和 SMTP_SSL 当它们的构造器所给定的超时参数为零以防止创建非阻塞套接字时会引发 ValueError。(由 Dong-hee Na 在 bpo-39259 中贡献。)

现在 LMTP 构造器具有可选的 timeout 形参。(由 Dong-hee Na 在 bpo-39329 中贡献。)

8. socket

socket 模块现在会在 Linux 4.1 或更高版本上导出 CAN_RAW_JOIN_FILTERS 常量。(由 Stefan Tatschner 和 Zackery Spytz 在 bpo-25780 中贡献。)

现在 socket 模块会在支持的平台上支持 CAN_J1939 协议。(由 Karl Ding 在 bpo-40291 上贡献。)

现在 socket 模块具有 socket.send_fds() 和 socket.recv.fds() 方法。(由 Joannah Nanjekye, Shinya Okano 和 Victor Stinner 在 bpo-28724 中贡献。)

9. time

在 AIX 上,现在 thread_time() 是使用具有纳秒级精度的 thread_cputime() 实现,而不再是只有 10 毫秒精度的 clock_gettime(CLOCK_THREAD_CPUTIME_ID)。

(由 Batuhan Taskaya 在 bpo-40192 中贡献。)

关于Python3.9的新特性就分享到这里了,更多内容,请前往官网查阅!

从以上信息看来,Python3.9改进还是比较多的,如果大家有兴趣的话,不妨尝试一下字典和改进的模块哟。

下一课分享:Python分支和循环。


 往期回顾 ·

自动化运维实战五  | 【演示】3分钟一键部署Mysql数据库

自动化运维实战四  | 【实现】Mysql一键部署的前后端交互

自动化运维实战三  | 【规划】Mysql一键部署的数据模型

自动化运维实战二  | 【构思】Mysql一键部署的界面

自动化运维实战一  | 【模板】 套用精美模板演示登陆界面

80865a441a4c96039e20c0c697e924f3.png

喜欢就点个  在看  呀!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值