国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Python 3.10 正式發(fā)布了!我發(fā)現(xiàn)了一個(gè)可怕的功能...

開發(fā) 后端
2021年10月4日 Python 終于正式發(fā)布了 3.10 版本,看了下這個(gè)版本的一些特性,最受關(guān)注的應(yīng)該就是 結(jié)構(gòu)模式匹配 了吧?也就是大家所熟悉的 match-case。

 2021年10月4日 Python 終于正式發(fā)布了 3.10 版本,看了下這個(gè)版本的一些特性,最受關(guān)注的應(yīng)該就是 結(jié)構(gòu)模式匹配 了吧?也就是大家所熟悉的switch-case,寫錯(cuò)了不好意思,是 match-case。

下邊是最簡單的一個(gè) match-case 的例子,看起來是不是非常的直觀簡潔? 

  1. def http_error(status):  
  2.     match status:  
  3.         case 400:  
  4.             print("Bad request")  
  5.         case 404:  
  6.             print("Not found")  
  7.         case 418:  
  8.             print("I'm a teapot")  
  9.         case _:  
  10.             print("Something's wrong with the internet") 

對(duì)這個(gè)功能滿懷期待的我,趕緊就下載升級(jí)了 3.10 的 Python 趕緊試用,可沒想到在我深入的體驗(yàn)過后,我從最開始的期待,變成了敬畏。

敬畏,是因?yàn)檫@樣一個(gè)看似簡單的新功能,卻有著不少的學(xué)習(xí)成本,并且對(duì) 結(jié)構(gòu)模式匹配 半知半解的人來說,會(huì)增大代碼出錯(cuò)的概率,并不是大數(shù)人都能輕松駕馭的。

我為什么會(huì)這么說呢?我會(huì)在文章最后來簡述我的觀點(diǎn)。

鑒于大多數(shù)人,都沒有實(shí)際用過這種 結(jié)構(gòu)模式匹配,我會(huì)從 升級(jí) 3.10 開始教大家如何嘗鮮這個(gè)新功能,然后我會(huì)詳細(xì)的介紹 match-case 的使用方法。

 1. 升級(jí) 3.10 新版本

我本機(jī)的電腦上目前的 Python 版本是 3.9.1 的 

  1. $ /usr/local/bin/python3 --version  
  2. Python 3.9.1 

由于這邊我使用的是 mac,因此我從官網(wǎng)上下載的是 Python 3.10 的 pkg 文件,如果是 win 的用戶,可以下載相應(yīng)的 msi 或者 exe 文件。

下載鏈接我貼在下邊,可以直接訪問下載 

  1. mac: https://www.python.org/ftp/python/3.10.0/python-3.10.0-macos11.pkg  
  2. win: https://www.python.org/ftp/python/3.10.0/python-3.10.0-amd64.exe 

我下載好安裝文件后,雙擊安裝,之后就雙擊下載的 pkg 文件,進(jìn)入安裝流程

一路點(diǎn)擊繼續(xù),該同意的同意一下,出現(xiàn)如下提示表示安裝成功。

再次在終端上確認(rèn)下是否升級(jí)成功

 2. or 模式的使用

在上面我已經(jīng)貼出一個(gè) match-case 的最簡單示例,這邊就直接跳過簡單示例,來說說那些比較特殊的用法。

在 Python 3.10 中其實(shí)有新增一個(gè) 聯(lián)合類型操作符 | ,但這個(gè)只能用于類型,具體的用法,我會(huì)在下一篇文章中做詳細(xì)的介紹,本篇文章還是集中于 match-case 的使用。

在學(xué)習(xí)match-case 的時(shí)候,你會(huì)發(fā)現(xiàn),也有一個(gè)類似于聯(lián)合類型操作符的用法,但請(qǐng)你要注意區(qū)別,它并不是聯(lián)合類型操作,而是在 match-case 下獨(dú)有的 or模式操作符 | ,它可以將多個(gè)具體相同邏輯的 case 語句簡寫成同一個(gè) 

  1. match status:  
  2.     case 401 | 403 | 404:  
  3.         print("Not allowed")  
  4.     case _:  
  5.         print("Something's wrong with the internet") 

 3. 通配符匹配任意對(duì)象

match-case 的出現(xiàn)有利于提高代碼的可讀性,讓你的代碼更加優(yōu)雅,但同時(shí)要使用好它,也是有一些門檻的,特別是通配符的使用。

下邊我舉一些例子來進(jìn)行講解

在如下代碼中,使用了通配符 _ 和 可變參數(shù)中的  * 符號(hào) 

  1. import sys  
  2. match sys.argv[1:]:  
  3.     case ["quit"]:  
  4.         print("exit")  
  5.     case ["create", user]:     # 創(chuàng)建單個(gè)用戶  
  6.         print("create", user)  
  7.     case ["create", *users]:  # 批量創(chuàng)建多個(gè)用戶  
  8.         for user in users:  
  9.             print("create", user)  
  10.     case _:  
  11.         print("Sorry, I couldn't understand the argv") 

最后一個(gè) case 中的 _ 并不作為變量名,而表示一種特殊的模式,在前面的 case 中都未命中的情況下,該 case 會(huì)是最后的保障,能確保命中,它相當(dāng)于 Go 語言中的 default 分支。 

  1. import "fmt"  
  2. func main() {  
  3.     education :"本科"  
  4.     switch education {  
  5.     case "博士":  
  6.         fmt.Println("我是博士")  
  7.     case "研究生":  
  8.         fmt.Println("我是研究生")  
  9.     case "本科":  
  10.         fmt.Println("我是本科生")  
  11.     case "大專":  
  12.         fmt.Println("我是大專生")  
  13.     default:  
  14.         fmt.Println("學(xué)歷未達(dá)標(biāo)..")  
  15.     } 
  16.  

 4. 使用可變參數(shù) *args

第二個(gè) case 和 第三個(gè) case 非常的像,區(qū)別在于第三個(gè) case中 users 前加了個(gè) *,他跟原 Python 函數(shù)中的可變參數(shù)是一個(gè)用法,會(huì)匹配列表的多個(gè)值。

在該中表示可以從命令行參數(shù)中批量創(chuàng)建用戶。

在 match-case 中相應(yīng)的 case 若有運(yùn)行到,對(duì)應(yīng)的變量是會(huì)被創(chuàng)建的。比如:

 5. 使用可變參數(shù) **kv

在如下代碼中,**rest 會(huì)匹配到所有的 args 中的 key 和 value

 6. 長度的匹配方式

若你希望使用 case 僅對(duì)對(duì)象的長度做一些匹配,可以使用下面這樣的方式

  •  [*_] 匹配任意長度的 list;
  •  (, , *_) 匹配長度至少為 2 的 tuple。

 7. 類對(duì)象的匹配

對(duì)于類對(duì)象的匹配,下邊這個(gè)例子足夠簡單,不再講解。

 8. 匹配要注意順序

在上邊基本介紹完了 match-case 的使用方法,如需更詳細(xì)的內(nèi)容,不如去通讀下 PEP 636(https://www.python.org/dev/peps/pep-0636/) 的內(nèi)容。

在文章最開始的時(shí)候,我說過開發(fā)者應(yīng)該對(duì)這些新特性 心存敬畏,match-case 這樣一個(gè)看似簡單的新功能,卻有著不少的學(xué)習(xí)成本,如果對(duì) 結(jié)構(gòu)模式匹配 半知半解的人來說,可能會(huì)增大代碼出錯(cuò)的概率,并不是大數(shù)人都能輕松駕馭的。

之所以會(huì)這么說,是因?yàn)?match-case 在面對(duì)不同的對(duì)象,它的匹配的規(guī)則也有所不同。

  •  當(dāng) match 的對(duì)象是一個(gè) list 或者 tuple 的時(shí)候,需要長度和元素值都能匹配,才能命中,這就是為什么下面這個(gè)例子走的是第三個(gè) case 而不是第二個(gè) case。

  •  當(dāng) match 的對(duì)象是一個(gè) dict 的時(shí)候,規(guī)則卻有所不同,只要 case 表達(dá)式中的 key 在所 match 的對(duì)象中有存在,即可命中。

  •  而當(dāng) match 的對(duì)象是類對(duì)象時(shí),匹配的規(guī)則是,跟 dict 有點(diǎn)類似,只要對(duì)象類型和對(duì)象的屬性有滿足 case 的條件,就能命中。

因此在寫 match-case 的時(shí)候,最大的難點(diǎn)可能就是如何把握這個(gè)順序,才能確保你寫的代碼不會(huì)翻車。

我個(gè)人總結(jié)一些規(guī)律,僅供大家參考:

  •  list 或者 tuple:應(yīng)該從不格式到嚴(yán)格
  •  dict 或者 object:應(yīng)該從嚴(yán)格到不嚴(yán)格

在經(jīng)過半天時(shí)間的嘗鮮后,我有了一些自己的理解,分享給大家,不知道我的理解有沒有問題,但我依然建議大家在 充分了解 match-case 的匹配規(guī)則 后,再去使用它。 

 

責(zé)任編輯:龐桂玉 來源: Python編程
相關(guān)推薦

2023-06-24 23:11:07

2025-05-19 10:04:48

2022-11-30 09:18:51

JavaMyBatisMQ

2021-04-22 07:47:47

JavaJDKMYSQL

2024-05-20 08:25:55

2024-06-03 11:43:55

2021-06-02 08:00:57

WebAsyncTas項(xiàng)目異步

2020-05-18 08:42:23

CSS背景圖像前端開發(fā)

2023-05-17 00:22:15

2021-04-28 14:31:35

Dubbo接口日志

2023-02-26 01:02:22

2021-12-29 19:20:41

數(shù)據(jù)GitHub服務(wù)器

2020-04-01 08:40:44

Vue.jsweb開發(fā)

2025-06-04 08:10:59

2020-06-09 08:05:11

Android 代碼操作系統(tǒng)

2019-01-14 11:10:43

機(jī)器學(xué)習(xí)人工智能計(jì)算機(jī)

2023-06-20 08:01:09

RoseDB存儲(chǔ)數(shù)據(jù)

2020-06-16 08:39:35

JavaScript圖像處理庫

2021-07-10 07:40:27

Excel數(shù)據(jù)分析大數(shù)據(jù)

2018-03-07 09:35:08

Python淘寶數(shù)據(jù)
點(diǎn)贊
收藏

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

日韩在线激情| 妖精一区二区三区精品视频| 成人免费毛片片v| 777精品视频| 久久全国免费视频| 国产一区二区三区免费看| 久久久久久网站| 污视频在线免费观看网站| 国产精品视频线看| 亚洲欧美日韩国产yyy| 久久人人爽人人爽人人片av不| 欧美一区二区播放| 三上悠亚一区二区三区| 国产ts人妖一区二区| 欧美高清视频一区二区三区在线观看| 欧美18xxxx| 深夜福利一区二区| 大黄网站在线观看| 欧美性视频一区二区三区| 激情五月色综合亚洲小说| av中文字幕一区| 女同性恋一区二区| 日本在线不卡视频| 精品免费视频123区| 欧美三级伦理在线| 天堂中文字幕在线| 日韩精品永久网址| 欧美夫妻性视频| 日本韩国欧美| 日韩精品一区二区三区在线| 男人的天堂在线免费视频| 亚洲视频一区在线观看| 一级黄色特级片| 国产欧美日韩三级| 国产性生交xxxxx免费| 99精品国产99久久久久久白柏| 在线观看免费91| 久久精品国产99国产精品| 亚洲狠狠婷婷综合久久久| 久久精品主播| 欧美一级二级三级| 国产情侣一区| 欧美日韩精品不卡| 久久久久看片| 国产99久久精品| 日韩五码在线| 91久久久久久久| 亚洲精品国产偷自在线观看| 91精品久久久久久久久中文字幕| 久草在线成人| 国产精品一区二区三区久久| 99久久夜色精品国产亚洲1000部| 国产精品第10页| 天天av综合| 久久久久久久免费| 蜜臀av性久久久久蜜臀av麻豆| 麻豆中文字幕在线观看| 国产福利一区在线| 欧美啪啪免费视频| 俺来也官网欧美久久精品| 欧美一区影院| 精品视频一区二区三区四区| 美女国产一区| 超碰成人在线免费观看| 成人久久18免费网站麻豆| 大肉大捧一进一出好爽视频| 国产精品入口麻豆原神| 国产精品99久久久久久久女警| 国产69精品久久久久99| 亚洲激情77| 91久久精品国产91久久性色tv| 99精品视频免费观看视频| 亚洲看片网站| 久久久亚洲高清| 中文字幕在线视频免费观看| 欧美精选一区二区| 大胆人体一区二区| 国产69精品久久久久9999| 一本到12不卡视频在线dvd| 欧美日韩中文国产一区发布| 国产精品主播直播| 91精选福利| 欧美群妇大交群的观看方式| 精品免费av一区二区三区| 日本高清视频精品| 在线不卡视频| 日韩精品一区二区三区四| 国产另类第一区| 日韩精品中文字幕吗一区二区| 欧美一区视频在线| 国产亚洲午夜| 亚洲人成无码www久久久| 天天综合日日夜夜精品| 日本动漫同人动漫在线观看| 色综合久久久888| 欧美国产激情| 久久男人资源站| 一区二区三区免费看视频| 91在线直播| 欧美激情a∨在线视频播放| 红桃视频国产一区| 粉嫩虎白女毛片人体| 欧美无砖专区一中文字| 精品176极品一区| av一区二区三区四区电影| 国产美女视频一区| 欧美偷拍视频| 久久精品视频中文字幕| 一区二区三区四区电影| 久久国产成人精品国产成人亚洲| 亚洲一区二区不卡免费| 美女视频黄免费的亚洲男人天堂| 国产精品免费区二区三区观看| www.日韩在线| 国产在线视频网址| 久久久久女教师免费一区| 日韩精品五月天| 在线视频中文字幕| 欧美大片va欧美在线播放| 日韩激情视频在线观看| 小明精品国产一区二区三区| 久久久999国产精品| 久久精品亚洲| 中文字幕av在线播放| 久久久久久久91| 国产精品一区二区你懂的| 老司机午夜在线视频| 欧美成人激情| av电影一区二区三区| 日韩欧美有码在线| 国产精品流白浆在线观看| 成人午夜免费在线视频| 五月天亚洲激情| 麻豆av在线免费看| 黄色视屏网站在线免费观看| 欧美一区二区三区四区夜夜大片| 成人黄色网址在线观看| 久草资源在线| 国产精品久久久久久搜索| 亚洲一区二区三区香蕉| 亚洲人成网亚洲欧洲无码| 野外做受又硬又粗又大视频√| 欧美一区二区高清| 国产精品chinese| 成年人羞羞的网站| 欧美大片欧美激情性色a∨久久| 美腿丝袜一区二区三区| 日本在线观看视频| 91精品在线播放| 依依成人综合视频| 香蕉视频一区二区三区| 激情综合网五月激情 | 欧美自拍偷拍一区| 亚洲区小说区| 午夜激情福利在线| 久久99国产精品自在自在app| 成人性生交大片免费看视频在线 | av中文字幕在线观看第一页| 国产伦理一区二区三区| 黄色精品一区二区| 欧美日韩国产一区二区三区不卡| 黄色永久免费网站| 欧美激情精品久久久久久久变态| 中国人体摄影一区二区三区| 黄色国产精品视频| 国产高清在线一区二区| 久草精品在线观看| 91三级在线| 日韩精品一区二区三区丰满| 欧美精品色一区二区三区| 中文亚洲字幕| 18视频在线观看网站| 亚洲一区二区精品在线| 亚洲另类色综合网站| 日韩欧美一级片| 最新国产精品久久精品| 久久久久久高潮国产精品视| 超碰在线97免费| 免费在线午夜视频| 欧美在线看片| 国产69久久| 水蜜桃亚洲精品| 亚洲免费一级电影| 99久久伊人网影院| 77成人影视| 在线中文av| 日本精品二区| 中文字幕国产亚洲2019| 国产精品私房写真福利视频| 成人在线国产| 26uuu亚洲电影在线观看| 波多野结衣 作品| 91国产美女视频| 欧美色网一区二区| 激情综合网av| 日本久久成人网| h视频在线免费观看| a在线视频观看| 成人午夜在线影院| 日韩成人在线免费观看|