Python 3.9 beta预计下个月就要发布了,那么3.9有那些让我们期待的新功能和变更呢?本我我们一起来说Python 3.9的新功能的。

安装测试版

为了能够实际探索Python 3.9 的功能,我们需要先下载一个Python 3.9 alpha/beta并安装。

wget https://www.python.org/ftp/python/3.9.0/Python-3.9.0a5.tgz

tar xzvf Python-3.9.0a5.tgz

cd Python-3.9.0a5

./configure --prefix=/home/chongchong/python-3.9

make

make install

这样python测试版本就会安装完成,我们通过

/home/chongchong//python-3.9/bin/python3.9

运行此命令后,会显示当前版本和提示消息:

新区操作符

最值得期待的新功能是新字典合并运算符:|和|=。当前,我们要对字典合并要的做法,假设有两个字典:

d1 = {"x": 1, "y": 4, "z": 10}

d2 = {"a": 7, "b": 9, "x": 5}

我们希望结果为:

{'x': 5, 'y': 4, 'z': 10, 'a': 7, 'b': 9}

# ^^^^^ Notice that "x" got overridden by value from second dictionary

方法1:

d = dict(d1, **d2)

方法2:

d = d1.copy()

d.update(d2)

方法3:

d = {**d1, **d2}

方法1使用dict(iterable, **kwargs)初始化字典的函数:第一个参数是普通字典,第二个参数是键/值对列表,在这种情况下,是使用**操作符解压缩的另一个字典。

方法2使用update功能用第二个字典中的键值对更新第一个字典。由于该操作会修改原始字典,因此我们需要将第一个字典复制到最终变量中,以避免修改原始字典。

方法3是最简练的解决方案,使用了字典解压缩并将两个变量(d1和d2)解压缩为结果变量d。

三种方法都可以用,在python 3.9中,我们还可以使用新的|操作法来解决。

新操作符方法:

方法4:

d = d1 | d2

d = {'x': 5, 'y': 4, 'z': 10, 'a': 7, 'b': 9}

方法5:

d1 |= d2

d1 = {'x': 5, 'y': 4, 'z': 10, 'a': 7, 'b': 9}

上面的方法4与方法1的拆包(d = {**d1, **d2})非常相似。方法5可用于就地合并,其中原始变量(d1)被第二操作数(d2)的值更新。

拓扑顺序

functools模块的TopologicalSorter可能是值得关注的另一项新功能。该类允许我们使用拓扑顺序对图进行排序。拓扑顺序是这样的顺序,其中对于2个节点u和v通过向边连接uv(从u至v)u在v前

在引入此功能之前,我们必须使用Khan的算法或深度优先搜索(不是完全简单的算法)手动来实现。在pyton 4.9中,如果需要对依赖作业进行排序以进行调度,则只需执行下面的操作:

from functools import TopologicalSorter

graph = {"A": {"D"}, "B": {"D"}, "C": {"E", "H"}, "D": {"F", "G", "H"}, "E": {"G"}}

ts = TopologicalSorter(graph)

list(ts.static_order())

结果:

['H', 'F', 'G', 'D', 'E', 'A', 'B', 'C']

在上面的示例中,我们首先使用字典创建图,其中键是传出节点,值是它们的邻居集。之后,我们使用图形创建sorter的实例,然后调用static_order函数以产生排序。请记住,此顺序可能取决于插入顺序,因为当2个节点处于同一图形级别时,它们将按插入顺序返回。

除了静态的排序,此类还支持节点的并行处理,比如与任务队列工作。

IPv6范围的地址

Python 3.9中引入的另一个变化是可以指定IPv6地址的范围。对不不熟悉IPv6的人来说,通过IPv6范围,它可以用来验证IP的有效性。范围可以在IP地址的末尾使用%符号指定,例如"3FFE:0:0:1:200:F8FF:FE75:50DF%2"。该IP地址为范围内2,即链接本地地址。

因此,如果需要在Python中处理IPv6地址,现在可以这样处理:

from ipaddress import IPv6Address

addr = IPv6Address('ff02::fa51%1')

print(addr.scope_id)

结果为:

"1" – 表示网卡本地地址。

但是,使用IPv6范围时应注意一件事。使用基本的Python运算符进行比较时,范围不同的两个地址不相等。

新math功能

Python 3.9在math模块中,添加或改进了许多其他功能。

import math

math.gcd(80, 64, 152)

8

以前计算最大公因数的函数(gcd)只能应用于2个数字,所以,我们不得不要变相使用math.gcd(80, math.gcd(64, 152))的方法来处理。从Python 3.9开始,gcd可以将其应用于任意数量的值。

math模块的新增加的功能是math.lcm:

math.lcm(4, 8, 5)

40

math.lcm用来计算其参数的最小公倍数。与gcd相同,它允许可变数量的参数。

还有两个新增加的功能是math.nextafter和math.ulp:

math.nextafter(4, 5)

4.000000000000001

math.nextafter(9, 0)

8.999999999999998

math.ulp(1000000000000000)

0.125

math.ulp(3.14159265)

4.440892098500626e-16

math.nextafter(x, y)功能是非常简单:它表示往后面浮动x到y同时增加浮点数精度的近似(补0或者9)。

而math.ulp用作数值计算精确的测量。最简短的解释是使用示例:

假设我们没有64位计算机。相反,我们只有3位数字。用这3位数字可以表示3.14而不是3.141。使用3.14,我们可以代表的最接近的较大数字是3.15,这2个数字相差1个ULP(最后一个单位),即0.1。因此,math.ulp返回值如上面示例。

新的字符串函数

Python 3.9中,字符串也添加了两个新的便捷功能:

removeprefix,去掉前缀

"someText".removeprefix("some")

结果为"Text"

removesuffix,去掉后缀

"someText".removesuffix("Text")

"some"

对这两个函数的功能可以使用string[len(prefix):]前缀和string[:-len(suffix)]后缀来实现的功能。但是这样的操作在日常很常见,所以增加这两个函数可以带来很多便捷。

HTTP代码

还有一个需要提及的新功能是HTTP模块中已经增加了状态码http.HTTPStatus。即是:

import http

http.HTTPStatus.EARLY_HINTS

#

http.HTTPStatus.TOO_EARLY

#

http.HTTPStatus.IM_A_TEAPOT

#

http.HTTPStatus这些状态码会对我们处理http协议中的很多问题带来便捷。

结论

Python 3.9目前还处于Alpha阶段,下个月发布beta版本,到正式版发布已经为时不多了,希望该文章介绍能对我们版本升级更换有所帮助。

python3 2.00gb怎么去掉单位_最值得期待的Python 3.9的新功能相关推荐

  1. python3.7装anaconda什么版本_【对话系统】配置python+dlatk+theano不装anaconda的血泪史...

    装完环境有一阵了,现在回忆起来还是很崩溃(. 我知道theano已经凉了-- dlatk:Differential Language Analysis ToolKit,是一个端到端的人类文本分析软件包 ...

  2. python3在线-Python 3中的新功能

    教 程 目 录 __future__模块 Python 3.x介绍了一些Python 2不兼容的关键字和功能,可以通过Python 2中内置的__future__模块导入 .如果您计划对代码进行Pyt ...

  3. 弹出键盘布局上移_评测 | 别买了HHKB键盘不知道这些新功能!

    ⇪ 点击"蓝字"关注我们 ⇪  关于HHKB静电容键盘的新品系列,小U已经与大家分享了不少"评测",虽然距离新品发布已经有一段时间,但大家的热情依旧不减呀,每一 ...

  4. python不能复制粘贴_你知道怎么使用python实现复制粘贴的功能吗?

    楔子 pandas里面有这么一个方法:pd.read_clipboard,可以根据你复制的内容生成DataFrame.是的,就是我们平时选中,然后复制.或者Ctrl+C时拷贝的内容,所以比较神奇,那么 ...

  5. 微信小程序 界面禁止下拉 左右滑动_微信 iOS 版更新,带来了这些新功能

    果粉俱乐部 让科技更好的服务生活 点击上方「蓝字」加入我们 iOS 13 正式版系统即将到来,第三方应用已经开始陆续更新适配,微信在 9 月 17 号也推出了新的 iOS 版 7.0.7 版本更新. ...

  6. 公众号 多服务器配置_公众号太多看不过来?微信新功能帮你一键拒收

    用过 TIM 的朋友都称赞过一个功能,那就是它能把你长时间未联系的 QQ 好友一键分组,让你能够「尴尬又不失礼貌」地把不常联系的好友单独区分开来.而在微信上,许多人也面临着同样的问题--只不过这次「冗 ...

  7. 腾讯qq珊瑚虫版_腾讯QQ迎来重大更新:三大新功能上线,短板补齐了

    2月22日消息,腾讯QQ iOS版迎来新一轮8.2.8内测版升级,这次更新主要有三方面的改进和升级,新版QQ支持面对面加好友功能,支持QQ群内的群公告"确认",提升了图片文字提取能 ...

  8. python3.7和3.8的区别-Python 3.8 新功能来一波(大部分人都不知道)

    Python 是一门广受好评的编程语言,每个版本的更新都会对开发社区带来一定影响.近日,Python 3.8 已进入 beta 2 版本的测试中,各项新特性已经添加完毕,最终版本预计于今年 10 月发 ...

  9. python3 批量定义多个变量_Python 3.8 新功能大揭秘

    Python 3.8是Python语言的最新版本,它适合用于编写脚本.自动化以及机器学习和Web开发等各种任务.现在Python 3.8已经进入官方的beta阶段,这个版本带来了许多语法改变.内存共享 ...

最新文章

  1. 关于持续集成几点知识点
  2. 现代密码学4.1--消息完整性
  3. boost::all_degree_centralities用法的测试程序
  4. php phpanalysis2.0,使用phpAnalysis打造PHP应用非侵入式性能分析器
  5. linux编译安装的好处,Linux学习—源码安装
  6. URLScan工具配置方法第1/2页
  7. where和having区别
  8. 手机测试相位软件,索尼发布手机用相位检测传感器
  9. DBMS_SQL使用
  10. H5app 调用手机摄像头拍照、录制视频并上传demo
  11. 减小App大小:图片篇
  12. shell蚂蚁森林_和“蚂蚁森林”的融合
  13. 一维无限深势阱定态薛定谔方程
  14. IE11 兼容 ES6
  15. hdu5514 Frogs(容斥原理)
  16. 湖北工业大学计算机学院多少分录取,多少分可以上湖北工业大学?
  17. 汽车车身修复技术【2】
  18. 云计算与网络安全:无代理安全防护更出色
  19. 浙大与北大计算机考研分数线,2017浙大考研复试分数线及相关问题
  20. javascript字符串string常用的几种方法

热门文章

  1. 开源 , KoobooJson一款高性能且轻量的JSON框架
  2. CAP 2.4版本发布,支持版本隔离特性
  3. .Net Core应用框架Util介绍(四)
  4. Scaffolding Template on Asp.Net Core Razor Page
  5. ASP.NET Core中的OWASP Top 10 十大风险-SQL注入
  6. 使用 Roslyn 编译器服务
  7. 微软全球副总裁给你发了一张Connect 2016专属邀请卡:信仰再充值!Connect 2016技术大会在线直播!
  8. 如何在 ASP.NET MVC 中集成 AngularJS(3)
  9. 程序员欢呼:微软Bing开始支持搜索源码、可直接运行
  10. C# 读取文件内容/输出txt log