当前位置: 首页 > 科技观察

值得期待的Python3.9新特性

时间:2023-03-13 18:34:09 科技观察

Python3.9beta预计将在下个月发布,那么3.9有哪些新特性和变化值得我们期待呢?下面就一起说说Python3.9的新特性吧。安装测试版为了真正探索Python3.9的特性,我们需要下载Python3.9alpha/beta并安装它。wgethttps://www.python.org/ftp/python/3.9.0/Python-3.9.0a5.tgztarxzvfPython-3.9.0a5.tgzcdPython-3.9.0a5./configure--prefix=/home/chongchong/python-3.9makemakeinstall以便安装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}方法一:d=dict(d1,**d2)方法2:d=d1.copy()d.update(d2)方法三:d={**d1,**d2}方法一用dict(iterable,**kwargs)初始化字典函数:第一个参数是a普通字典,第二个参数是键/值对列表,在本例中是另一个使用**运算符解包的字典。方法2使用update函数用第二个字典中的键值对更新第一个字典。由于这个操作修改了原始字典,所以我们需要将第一个字典复制到final变量中,以避免修改原始字典。方法三是最简洁的方案,使用字典拆包,将两个变量(d1和d2)拆包成结果变量d。这三种方法都可以使用,在python3.9中,我们还可以使用新的|操作方法来解决。新的运算符方法:方法4:d=d1|d2d={'x':5,'y':4,'z':10,'a':7,'b':9}方法5:d1|=d2d1={'x':5,'y':4,'z':10,'a':7,'b':9}上面方法4和方法1的解包(d={**d1,**d2})非常相似。方法5可用于就地合并,其中原始变量(d1)由第二个操作数(d2)的值更新。拓扑顺序functools模块中的TopologicalSorter可能是另一个值得关注的新功能。这个类允许我们使用拓扑顺序对图进行排序。拓扑顺序是2个节点u和v通过边u在v之前连接uv(从u到v)的顺序在介绍此功能之前,我们必须使用Khan的算法或深度优先搜索(不是完全简单的算法)来手动实现.在pyton4.9中,如果您需要对依赖作业进行排序以进行调度,您可以简单地执行:fromfunctoolsimportTopologicalSortergraph={"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']在上面的示例中,我们首先使用字典创建图形,其中键是传出节点和值是它们的邻居集。之后,我们使用图来创建排序器的实例,然后调用static_order函数来生成排序。请记住,此顺序可能取决于插入顺序,因为当2个节点处于同一图级别时,它们将按插入顺序返回。除了静态排序之外,此类还支持节点的并行处理,例如使用任务队列。IPv6范围地址Python3.9引入的另一个变化是指定IPv6地址范围的能力。对于不熟悉IPv6的,可以通过IPv6作用域来验证IP的合法性。可以使用IP地址末尾的%符号指定范围,例如“3FFE:0:0:1:200:F8FF:FE75:50DF%2”。IP地址在范围2中,即链路本地地址。因此,如果你需要在Python中处理IPv6地址,你现在可以这样做:fromipaddressimportIPv6Addressaddr=IPv6Address('ff02::fa51%1')print(addr.scope_id)结果是:“1”——表示本地地址网卡。但是,在使用IPv6范围时应注意一件事。使用基本Python运算符进行比较时,具有不同范围的两个地址不相等。新的数学函数Python3.9在数学模块中,添加或改进了许多其他函数。importmathmath.gcd(80,64,152)8用于计算最大公因数的函数(gcd)只能应用于2个数,所以我们要用math.gcd(80,math.gcd(64,152))in变相法对付。从Python3.9开始,gcd可以将其应用于任意数量的值。math模块新增函数为math.lcm:math.lcm(4,8,5)40math.lcm用于计算其参数的最小公倍数。与gcd相同,它允许可变数量的参数。Therearetwonewlyaddedfunctionsmath.nextafterandmath.ulp:math.nextafter(4,5)4.000000000000001math.nextafter(9,0)8.999999999999998math.ulp(1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000byThefunctionof-16math.nextafter(x,y)很简单:表示x向y浮动的趋势,同时增加浮点数的精度逼近(根据加0或9的情况)。而math.ulp用于精确测量的数值计算。最简短的解释是一个用法示例:假设我们没有64位计算机。相反,我们只有3个数字。用这3个数字可以表示3.14而不是3.141。使用3.14,我们可以表示的最接近的较大数字是3.15,这2个数字相差1ULP(最后一个单位),即0.1。因此,math.ulp的返回值如上例所示。在Python3.9新的字符串函数中,字符串还新增了两个方便的函数:removeprefix,去掉前缀“someText”。removeprefix("some")resultsin"Text"removesuffix,去掉后缀"someText".removesuffix("Text")"some"可以使用string[len(prefix):]前缀和string[:-len(suffix)]后缀来实现这两个函数的功能。但是这样的操作在日常生活中是很常见的,所以加入这两个功能可以带来很多方便。HTTP代码的另一个新特性需要提及的是HTTP模块中增加了状态码http.HTTPStatus。即:importhttp.HTTPStatus.EARLY_HINTS#http.HTTPStatus.TOO_EARLY#http.HTTPStatus.IM_A_TEAPOT#http.HTTPStatus这些状态码将我们处理http协议中的很多问题带来方便。结语Python3.9仍处于Alpha阶段,下个月将发布Beta版。距离正式版发布时间不多了。希望本文的介绍能够对我们的版本升级换代有所帮助。