python最新功能_再不知道就Out了!赶紧看看新发布的Python 3.9这些独特新功能

Python 3.9这些独特新功能

引言:

Python 3.9于2020年7月10日发布。

最新功能令人难以置信。

比如:

字典联合运算符:

最喜欢的新功能之一,具有优美的语法。如果有两个字典a并且b需要合并,那么现在使用并运算符。

类型提示:

使用此工具,我们的编辑人员可以立即了解问题。

我们也可以非常详细地了解所包含的类型

两种新的字符串方法

新的Python解析器 -这非常酷。但有可能成为Python未来发展中最重大的更改之一。

Python 3.9于2020年7月10日发布。最新功能令人难以置信。本文并不会详尽列出每项更改,而是列出了下一版对我们来说最有趣和值得注意的事情-开发人员。所以,让我们开始吧!

类型提示

Python是动态类型的,这意味着我们无需在代码中指定数据类型。

无需在代码中指定数据类型

没关系,但是有时可能会造成混淆,突然之间,Python的灵活性比其他任何事情都变得更加令人讨厌。

从3.5开始,我们可以指定类型,但是非常麻烦。此更新确实改变了这一点,让我们使用一个示例:

在我们的add_int函数中,我们显然希望为其自身添加相同的数字(由于某些神秘的未定义原因)。但是我们的编辑器并不知道,并且使用两个字符串一起添加完全可以,+因此不会发出警告。

现在,我们可以将期望的输入类型指定为int。使用此工具,我们的编辑人员可以立即了解问题。

我们也可以非常详细地了解所包含的类型,例如:

类型提示可以在任何地方使用-由于有了新的语法,现在它看起来更加简洁:

新解析器

这更多是视线之外的更改,但有可能成为Python未来发展中最重大的更改之一。

新解析器

Python当前使用的主要是基于LL(1)的语法,而该语法又可以由LL(1)解析器进行解析,该解析器从上到下,从左到右地解析代码,而前瞻性只是一个标记。

现在,我几乎不知道它是如何工作的,但是由于使用了这种方法,因此我可以向您介绍Python中的一些当前问题:

Python包含非LL(1)语法;因此,当前语法的某些部分使用了变通办法,从而造成了不必要的复杂性。

LL(1)在Python语法中创建了限制(没有可能的解决方法)。此问题突出表明,以下代码根本无法使用当前解析器实现(引发SyntaxError):

with (open("a_really_long_foo") as foo,

open("a_really_long_bar") as bar):

pass

LL(1)在解析器中以左递归中断。意味着特定的递归语法可能导致解析树中的无限循环。Python的创建者Guido van Rossum在这里对此进行了解释。

所有这些因素(以及我根本无法理解的更多因素)对Python产生了重大影响。它们限制了语言的发展。

基于PEG的新解析器将为Python开发人员提供更大的灵活性-从Python 3.10起我们将开始注意到这一点。

新的字符串函数

字符串添加了两个新的便捷功能:

# Remove prefix

"someText".removeprefix("some")

# "Text"

# Remove suffix

"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.IM_A_TEAPOT从生产服务器返回此代码时,我现在可以使用它来改善生活质量(讽刺,请不要这样做...)。

math新功能

同时,在math模块中,添加或改进了许多其他功能。从对一个现有功能的改进开始:

import math

# Greatest common divisor

math.gcd(80, 64, 152)

以前,gcd用于计算最大公约数的函数只能应用于2个数字,从而迫使程序员math.gcd(80, math.gcd(64, 152))在处理更多数字时必须执行类似的操作。从Python 3.9开始,我们可以将其应用于任意数量的值。

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

# Least common multiple

math.lcm(4, 8, 5)

# 40

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

其余2个新功能密切相关。这些是math.nextafter和math.ulp:

# Next float after 4 going towards 5

math.nextafter(4, 5)

4.000000000000001

# Next float after 9 going towards 0

math.nextafter(9, 0)

8.999999999999998

# Unit in the Last Place

math.ulp(1000000000000000)

0.125

math.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。

拓扑顺序

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

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个节点处于图形的同一级别时,它们将按照插入顺序返回。

新区操作符

最值得注意的新功能可能是新的词典合并运算符- |或|=。到目前为止,您必须从以下3个选项之一中进行选择以合并字典:

# Dictionaries to be merged:

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

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

# Expected output after merging

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

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

# 1. Option

d = dict(d1, **d2)

# 2. Option

d = d1.copy() # Copy the first dictionary

d.update(d2) # Update it "in-place" with second one

# 3. Option

d = {**d1, **d2}结语:

这就是即将推出的Python 3.9所包含的部分独特新功能。可能并非所有这些更改都与您的日常编程相关,但是我认为至少要注意前2个添加项(|operator和TopologicalSorter)是一件好事,因为它们有时会派上用场。你喜欢吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值