自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

值得期待的Python 3.9的新功能

開(kāi)發(fā)
Python 3.9 beta預(yù)計(jì)下個(gè)月就要發(fā)布了,那么3.9有那些讓我們期待的新功能和變更呢?本我我們一起來(lái)說(shuō)Python 3.9的新功能的。

Python 3.9 beta預(yù)計(jì)下個(gè)月就要發(fā)布了,那么3.9有那些讓我們期待的新功能和變更呢?本我我們一起來(lái)說(shuō)Python 3.9的新功能的。

 

安裝測(cè)試版

為了能夠?qū)嶋H探索Python 3.9 的功能,我們需要先下載一個(gè)Python 3.9 alpha/beta并安裝。

  1. wget https://www.python.org/ftp/python/3.9.0/Python-3.9.0a5.tgz 
  2. tar xzvf Python-3.9.0a5.tgz 
  3. cd Python-3.9.0a5 
  4. ./configure --prefix=/home/chongchong/python-3.9 
  5. make 
  6. make install 

這樣python測(cè)試版本就會(huì)安裝完成,我們通過(guò)

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

運(yùn)行此命令后,會(huì)顯示當(dāng)前版本和提示消息:

新區(qū)操作符

最值得期待的新功能是新字典合并運(yùn)算符:|和|=。當(dāng)前,我們要對(duì)字典合并要的做法,假設(shè)有兩個(gè)字典:

  1. d1 = {"x": 1, "y": 4, "z": 10} 
  2. d2 = {"a": 7, "b": 9, "x": 5} 

我們希望結(jié)果為:

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

方法1:

  1. d = dict(d1, **d2) 

方法2:

  1. d = d1.copy() 
  2. d.update(d2) 

方法3:

  1. d = {**d1, **d2} 

方法1使用dict(iterable, **kwargs)初始化字典的函數(shù):第一個(gè)參數(shù)是普通字典,第二個(gè)參數(shù)是鍵/值對(duì)列表,在這種情況下,是使用**操作符解壓縮的另一個(gè)字典。

方法2使用update功能用第二個(gè)字典中的鍵值對(duì)更新第一個(gè)字典。由于該操作會(huì)修改原始字典,因此我們需要將第一個(gè)字典復(fù)制到最終變量中,以避免修改原始字典。

方法3是最簡(jiǎn)練的解決方案,使用了字典解壓縮并將兩個(gè)變量(d1和d2)解壓縮為結(jié)果變量d。

三種方法都可以用,在python 3.9中,我們還可以使用新的|操作法來(lái)解決。

新操作符方法:

方法4:

  1. d = d1 | d2 
  2.  
  3.  
  4. d = {'x': 5, 'y': 4, 'z': 10, 'a': 7, 'b': 9} 

方法5:

  1. d1 |= d2 
  2.  
  3.  
  4. d1 = {'x': 5, 'y': 4, 'z': 10, 'a': 7, 'b': 9} 

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

拓?fù)漤樞?/strong>

functools模塊的TopologicalSorter可能是值得關(guān)注的另一項(xiàng)新功能。該類(lèi)允許我們使用拓?fù)漤樞驅(qū)D進(jìn)行排序。拓?fù)漤樞蚴沁@樣的順序,其中對(duì)于2個(gè)節(jié)點(diǎn)u和v通過(guò)向邊連接uv(從u至v)u在v前

在引入此功能之前,我們必須使用Khan的算法或深度優(yōu)先搜索(不是完全簡(jiǎn)單的算法)手動(dòng)來(lái)實(shí)現(xiàn)。在pyton 4.9中,如果需要對(duì)依賴(lài)作業(yè)進(jìn)行排序以進(jìn)行調(diào)度,則只需執(zhí)行下面的操作:

  1. from functools import TopologicalSorter 
  2. graph = {"A": {"D"}, "B": {"D"}, "C": {"E", "H"}, "D": {"F", "G", "H"}, "E": {"G"}} 
  3. ts = TopologicalSorter(graph) 
  4. list(ts.static_order()) 

結(jié)果:

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

在上面的示例中,我們首先使用字典創(chuàng)建圖,其中鍵是傳出節(jié)點(diǎn),值是它們的鄰居集。之后,我們使用圖形創(chuàng)建sorter的實(shí)例,然后調(diào)用static_order函數(shù)以產(chǎn)生排序。請(qǐng)記住,此順序可能取決于插入順序,因?yàn)楫?dāng)2個(gè)節(jié)點(diǎn)處于同一圖形級(jí)別時(shí),它們將按插入順序返回。

除了靜態(tài)的排序,此類(lèi)還支持節(jié)點(diǎn)的并行處理,比如與任務(wù)隊(duì)列工作。

IPv6范圍的地址

Python 3.9中引入的另一個(gè)變化是可以指定IPv6地址的范圍。對(duì)不不熟悉IPv6的人來(lái)說(shuō),通過(guò)IPv6范圍,它可以用來(lái)驗(yàn)證IP的有效性。范圍可以在IP地址的末尾使用%符號(hào)指定,例如"3FFE:0:0:1:200:F8FF:FE75:50DF%2"。該IP地址為范圍內(nèi)2,即鏈接本地地址。

因此,如果需要在Python中處理IPv6地址,現(xiàn)在可以這樣處理:

  1. from ipaddress import IPv6Address 
  2. addr = IPv6Address('ff02::fa51%1') 
  3. print(addr.scope_id) 

結(jié)果為:

"1" – 表示網(wǎng)卡本地地址。

但是,使用IPv6范圍時(shí)應(yīng)注意一件事。使用基本的Python運(yùn)算符進(jìn)行比較時(shí),范圍不同的兩個(gè)地址不相等。

新math功能

Python 3.9在math模塊中,添加或改進(jìn)了許多其他功能。

  1. import math 
  2. math.gcd(80, 64, 152) 

8

以前計(jì)算最大公因數(shù)的函數(shù)(gcd)只能應(yīng)用于2個(gè)數(shù)字,所以,我們不得不要變相使用math.gcd(80, math.gcd(64, 152))的方法來(lái)處理。從Python 3.9開(kāi)始,gcd可以將其應(yīng)用于任意數(shù)量的值。

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

  1. math.lcm(4, 8, 5) 

40

math.lcm用來(lái)計(jì)算其參數(shù)的最小公倍數(shù)。與gcd相同,它允許可變數(shù)量的參數(shù)。

還有兩個(gè)新增加的功能是math.nextafter和math.ulp:

  1. math.nextafter(4, 5) 

4.000000000000001

  1. math.nextafter(9, 0) 

8.999999999999998

  1. math.ulp(1000000000000000) 

0.125

  1. math.ulp(3.14159265) 

4.440892098500626e-16

math.nextafter(x, y)功能是非常簡(jiǎn)單:它表示往后面浮動(dòng)x到y(tǒng)趨勢(shì),同時(shí)增加浮點(diǎn)數(shù)精度的近似(根據(jù)確實(shí)補(bǔ)0或者9)。

而math.ulp用作數(shù)值計(jì)算精確的測(cè)量。最簡(jiǎn)短的解釋是使用示例:

假設(shè)我們沒(méi)有64位計(jì)算機(jī)。相反,我們只有3位數(shù)字。用這3位數(shù)字可以表示3.14而不是3.141。使用3.14,我們可以代表的最接近的較大數(shù)字是3.15,這2個(gè)數(shù)字相差1個(gè)ULP(最后一個(gè)單位),即0.1。因此,math.ulp返回值如上面示例。

新的字符串函數(shù)

Python 3.9中,字符串也添加了兩個(gè)新的便捷功能:

removeprefix,去掉前綴

  1. "someText".removeprefix("some") 

結(jié)果為"Text"

removesuffix,去掉后綴

  1. "someText".removesuffix("Text") 

"some"

對(duì)這兩個(gè)函數(shù)的功能可以使用string[len(prefix):]前綴和string[:-len(suffix)]后綴來(lái)實(shí)現(xiàn)的功能。但是這樣的操作在日常很常見(jiàn),所以增加這兩個(gè)函數(shù)可以帶來(lái)很多便捷。

HTTP代碼

還有一個(gè)需要提及的新功能是HTTP模塊中已經(jīng)增加了狀態(tài)碼http.HTTPStatus。即是:

  1. import http 
  2. http.HTTPStatus.EARLY_HINTS 
  3. <HTTPStatus.EARLY_HINTS: 103> 
  4. http.HTTPStatus.TOO_EARLY 
  5. <HTTPStatus.TOO_EARLY: 425> 
  6. http.HTTPStatus.IM_A_TEAPOT 
  7. <HTTPStatus.IM_A_TEAPOT: 418> 

http.HTTPStatus這些狀態(tài)碼會(huì)對(duì)我們處理http協(xié)議中的很多問(wèn)題帶來(lái)便捷。

結(jié)論

Python 3.9目前還處于Alpha階段,下個(gè)月發(fā)布beta版本,到正式版發(fā)布已經(jīng)為時(shí)不多了,希望該文章介紹能對(duì)我們版本升級(jí)更換有所幫助。

責(zé)任編輯:趙寧寧 來(lái)源: 蟲(chóng)蟲(chóng)搜奇
相關(guān)推薦

2010-07-15 09:19:24

Scala 2.8Scala 2.8下載Scala 2.8中文

2020-05-15 21:00:42

pythonkaif開(kāi)發(fā)代碼

2022-02-16 23:11:04

iOS蘋(píng)果功能

2020-04-03 11:22:15

Windows微軟功能

2023-04-10 06:59:17

Linux桌面環(huán)境

2023-11-16 08:55:14

CSS前端

2024-04-10 11:47:41

人工智能ChatGPT

2020-07-10 06:40:31

Python 3.9Python開(kāi)發(fā)

2010-06-18 13:24:01

GroovyGroovy 1.7.

2014-08-27 17:07:17

2020-10-31 21:50:54

Python3.9Python開(kāi)發(fā)

2014-01-23 14:42:34

Windows 9

2012-06-07 13:04:05

Windows 8微軟

2009-10-30 09:37:27

Windows Ser

2023-01-03 10:29:17

2016-08-02 13:38:31

2009-03-31 08:37:42

Dell智能手機(jī)移動(dòng)OS

2009-09-15 09:11:58

Bing 2.0

2020-10-09 18:34:55

ECMAScriptJavaScript開(kāi)發(fā)

2015-12-25 09:58:04

2016科技產(chǎn)品
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)