发布|再不知道就Out了!赶紧看看新发布的Python 3.9这些独特新功能( 二 )


字符串添加了两个新的便捷功能:
# Remove prefix"someText".removeprefix("some")# "Text"# Remove suffix"someText".removesuffix("Text")# "some"
这两个函数执行您可以通过使用string[len(prefix):]前缀和string[:-len(suffix)]后缀来实现的功能 。 这些是非常简单的操作 , 因此也是非常简单的功能 , 但是考虑到您可能会经常执行这些操作 , 因此具有内置功能可以很好地满足您的需求是一件很不错的事情 。
HTTP的状态代码

最后但并非最不重要的一点是 , 实际上…已将HTTP状态代码添加到http.HTTPStatus 。 即 , 这些是:
import httphttp.HTTPStatus.EARLY_HINTS# &ltHTTPStatus.EARLY_HINTS: 103&gthttp.HTTPStatus.TOO_EARLY# &ltHTTPStatus.TOO_EARLY: 425&gthttp.HTTPStatus.IM_A_TEAPOT# &ltHTTPStatus.IM_A_TEAPOT: 418&gt
查看这些状态代码 , 我不太明白您为什么会使用它们 。 就是说 , 很高兴终于可以让我成为茶壶状态代码 。 http.HTTPStatus.IM_A_TEAPOT从生产服务器返回此代码时 , 我现在可以使用它来改善生活质量(讽刺 , 请不要这样做...) 。
math新功能
同时 , 在math模块中 , 添加或改进了许多其他功能 。 从对一个现有功能的改进开始:
import math# Greatest common divisormath.gcd(80, 64, 152)
以前 , gcd用于计算最大公约数的函数只能应用于2个数字 , 从而迫使程序员math.gcd(80, math.gcd(64, 152))在处理更多数字时必须执行类似的操作 。 从Python 3.9开始 , 我们可以将其应用于任意数量的值 。
math模块的第一个新增加的math.lcm功能是:
# Least common multiplemath.lcm(4, 8, 5)# 40
math.lcm计算其参数的最小公倍数 。 与GCD相同 , 它允许可变数量的参数 。
其余2个新功能密切相关 。 这些是math.nextafter和math.ulp:

# Next float after 4 going towards 5math.nextafter(4, 5)4.000000000000001# Next float after 9 going towards 0math.nextafter(9, 0)8.999999999999998# Unit in the Last Placemath.ulp(1000000000000000)0.125math.ulp(3.14159265)4.440892098500626e-16
该math.nextafter(x, y)功能是非常简单-它是后年浮动x朝会y同时考虑到浮点数精度 。
在math.ulp另一方面 , 可能看起来有点怪异...... ULP代表“单位在最后的地方” , 它的用作数值计算精确的测量 。 最简短的解释是使用一个示例:
假设我们没有64位计算机 。 相反 , 我们只有3位数字 。 使用这3位数字 , 我们可以代表3.14 , 而不是3.141 。 使用3.14 , 我们可以代表的最接近的较大数字是3.15 , 这2个数字相差1个ULP(最后一个单位) , 即0.1 。 因此 , math.ulp返回值等于此示例 , 但是具有计算机的实际精度 。
拓扑顺序
functools模块的一部分是下一个有趣的新功能(有点晦涩) 。 您可以在TopologicalSorter课堂上找到它 。 此类允许我们使用拓扑顺序对图进行排序 。 那是什么?你可能会问 。 拓扑顺序是这样的顺序 , 其中对于2个节点u和v通过向边连接uv(从u至v)u之前时v 。
发布|再不知道就Out了!赶紧看看新发布的Python 3.9这些独特新功能
本文插图

拓扑顺序

在引入此功能之前 , 您必须自己使用例如Khan的算法或深度优先搜索(不是完全简单的算法)自己实现 。 因此 , 现在 , 如果需要(例如)对依赖作业进行排序以进行调度 , 则只需执行以下操作:
from functools import TopologicalSortergraph = {"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"]


推荐阅读