switch語法終於出現!Python 3.10來了

2021-12-10 極市平臺
對於從事數據科學和人工智慧領域的人們來說,Python 是大家的首選程式語言。根據最近的一項調查,27% 的程式設計師開發職位要求掌握 Python 語言,今年年初這一數字還只是 18.5%。
Python 流行的原因在於其擁有非常直觀的能力:這門語言擁有大量的庫、足夠高的生產效率,還相對易於學習。去年 10 月,Python 的 3.9 版正式發布了,從字典更新 / 合併到添加新的字符串方法,再到 zoneinfo 庫的引入,Python 3.9 添加了許多新特性.Python3.10 的第二個 alpha 版本也已於去年 11 月初發布,相比於不久前發布的 3.9 版本,新版本對類型注釋擴展、zip、位計數、字典映射又有了新的改進。就在昨天,Python 3.10 beta 版發布了,新的 beta 版最大的亮點可能就是引入了 switch-case 語句。Switch 語句存在於很多程式語言中,但 Python 程式語言不支持 Switch 語句。早在 2016 年,PEP 3103 就被提出,建議 Python 支持 switch-case 語句。然而,在調查中發現很少人支持該特性,Python 開發人員放棄了它。時間在推到 2020 年,Python 的創始人 Guido van Rossum,提交了顯示 switch 語句的第一個文檔,命名為 Structural Pattern Matching,見 PEP 634 。如今,隨著 Python 3.10 beta 版的發布,終於將 switch-case 語句納入其中。帶圓括號的上下文管理器:現在支持在上下文管理器中跨多行使用括號進行延續。也可以在所包含組的末尾使用逗號。
with (    CtxManager1() as example1,    CtxManager2() as example2,    CtxManager3() as example3,):    ...

錯誤消息 - NameErrors:當列印由 interpreter 引發的 NameError 時,PyErr_Display() 將在引發異常的函數中提供相似變量名的建議:PEP 634 結構模式匹配:模式匹配允許用戶在 match 後面跟隨數個 case 語句。當在程序執行 match-case 時,有匹配的語句,程序就會進入相應的 case 語句來執行操作。match-case 語法和操作:模式匹配的通用語法是:
match subject:    case <pattern_1>:        <action_1>    case <pattern_2>:        <action_2>    case <pattern_3>:        <action_3>    case _:        <action_wildcard>

match 語句接受一個表達式,並將其值與作為一個或多個 case 塊給出的連續模式進行比較。match-case 示例如下:
http_code = "418"match http_code:    case "200":        print("OK")        do_something_good()    case "404":        print("Not Found")        do_something_bad()    case "418":        print("I'm a teapot")        make_coffee()    case _:        print("Code not found")

下圖是 match-case 語句執行示意圖。程序會檢查多個 case 條件,並根據在變量 http_code 中找到的值執行不同的操作。同樣的,你也可以使用一組 if-elif-else 語句來構建相同的邏輯:
http_code = "418"if http_code == "418":    print("OK")    do_something_good()elif http_code == "404":    print("Not Found")    do_something_bad()elif http_code == "418"    print("I'm a teapot")    make_coffee()else:    print("Code not found")

然而,通過使用 match-case 語句,刪除了 http_code == 的重複執行,當測試許多不同的條件時使用 match-case,http_code == 看起來更加清晰。我們可以通過一個簡單的例子來了解模式匹配:用 C、Java 或 JavaScript(以及許多其他語言)中的 switch 語句將對象(數據對象)與文本(模式)進行匹配。switch 語句通常用於將對象 / 表達式與包含文字的 case 語句進行比較。雖然使用嵌套 if 語句的命令式指令系列可以用來完成類似於結構模式匹配的任務,但它不如聲明式方法那麼清晰。相反,聲明性方法聲明了匹配所需滿足的條件,並且通過其顯式模式更具可讀性。雖然結構模式匹配可以以最簡單的形式使用,將變量與 case 語句中的文本進行比較,但它對 Python 的真正價值在於它對對象類型和大小的處理。match-case 可以說是此次 Python 3.10 beta 版本最大的亮點。對於這種表達式,有人喜歡,有人憎惡。在 Python 還不支持 switch-case 之前,大家可能都是使用字典進行相關操作。有人說 switch 除了讀著方便,沒什麼優點;還有人說 Python 的閉包機制,dict 的 value 可以是帶閉包的函數,這樣就使得表達能力比 switch-case 更上一層樓;但總歸 Python 3.10 beta 版本納入了 switch-case,為開發者提供了另一種選擇。更多詳細信息,請參考:https://docs.python.org/3.10/whatsnew/3.10.html參考連結:https://towardsdatascience.com/switch-case-statements-are-coming-to-python-d0caf7b2bfd3

推薦閱讀



備註:姓名-學校/公司-研究方向-城市(如:小極-北大-目標檢測-深圳)

即可申請加入極市目標檢測/圖像分割/工業檢測/人臉/醫學影像/3D/SLAM/自動駕駛/超解析度/姿態估計/ReID/GAN/圖像增強/OCR/視頻理解等技術交流群

每月大咖直播分享、真實項目需求對接、求職內推、算法競賽、乾貨資訊匯總、與 10000+來自港科大、北大、清華、中科院、CMU、騰訊、百度等名校名企視覺開發者互動交流~

覺得有用麻煩給個在看啦~  

相關焦點

  • Python 3.10來了,switch語法終於出現
    去年 10 月,Python 的 3.9 版正式發布了,從字典更新 / 合併到添加新的字符串方法,再到 zoneinfo 庫的引入,Python 3.9 添加了許多新特性.Python3.10 的第二個 alpha 版本也已於去年 11 月初發布,相比於不久前發布的 3.9 版本,新版本對類型注釋擴展、zip、位計數、字典映射又有了新的改進。
  • Python 為什麼不支持 switch 語句?
    簡而言之,PEP 提案有了,語法實現也有了雛形,但是核心開發者們似乎沒有達成一致意見,最終導致提案流產了。3、PEP-275 與 PEP-3103 說了什麼?PEP-3103 是在 2006 年提出的,PEP-275 則是在 2001 年提出的,它們的共同之處是提出了引入 switch 語句的某種必要性、分析了好幾種備選的實現方案,然而,結局是都被拒絕了。
  • 全新語句match,python新版本終於要引入switch-case了?
    match語句(python3.10)在很多語言中,有一種用於條件判斷的switch-case語句,但是在python中一直以來,沒有switch-case
  • Python3.10發布,這個特性愛了愛了
    3.10正式版發布Python在幾天前發布了正式版3.10,雖然你不一定會馬上應用到生產環境,不過還是建議有條件的可以升級體驗以下,沒條件直接看我這篇文章就可以了,我列了幾個開發者可能比較感興趣的特性,看看哪個是你最期待的特性。
  • Python基本語法V1.5
    首先學習一門程式語言最先要學習的是語言的語法,學習程式語言的語法包括常量與變量、輸入與輸出、條件語句(if)、循環語句(for,while)、交換語句(switch,case)、函數(function)、對象(class),這個和之前福哥帶著童鞋們接觸c/c++、java、php三種主流程式語言的基本語法的順序是一樣的。
  • Python 3.10 新增 switch-case 功能,都有哪些新玩法?
    Python 3.10 不但加入了建議已久的  switch-case 語句,還優化了報錯提示、縮進提醒等問題。預計用不了多久,Python 就能擺脫「遊標卡尺語言」這個梗了。今天就給大家詳細介紹一下 Python 3.10 的 switch-case 特性和進階玩法:通用語法Switch 語句存在於很多程式語言中,早在 2016 年,PEP 3103 就被提出,建議 Python 支持 switch-case 語句。
  • Python3.10新增switch-case,再也不用琢磨如何實現switch功能了!
    Python 3.10 不但加入了建議已久的  switch-case 語句,還優化了報錯提示、縮進提醒等問題。預計用不了多久,Python 就能擺脫「遊標卡尺語言」這個梗了。今天,就給大家詳細介紹一下 Python 3.10 的 switch-case 特性和進階玩法。
  • python教程值得收藏的python語法總結
    但是語法糖用的好就是效率提升,用的不好就是可讀性災難,有些語法的出現也伴隨著種種的爭議,用更新的語法不代表能寫出更好的代碼。r來選擇用str()還是repr()方法轉換為字符串。基本就是str.format的語法糖。在3.8版本以後,又增加了直接套表達式的功能,輸出信息非常方便。
  • Python編程入門——基礎語法詳解(經典)
    = [(2,4,6),{5:7,9:11,'key':[2,5]},6]#dictionary 字典sample_dic = {"key":value, 5:10}#tuple 只讀的序列sample_tuple = (3,9,"ab")從上面的示例可以看出,python的變量無需聲明,可直接給變量賦值。
  • Python實現switch/case用法案例
    —— Pandas的DataFrame如何按指定list排序—— Python的條件分支語句switch/case如何實現基本用法# 引入pandas的數據類型「category」,從而進行排序。# python中沒有switch case語句。
  • Python 3.10發布臨近,一文盡覽所有重要新特性和變化
    3.10 的發布日益臨近,是時候來看看它將帶來的最重要的新特性和變化了。內容包括類型檢查,類型別名,switch/case語法,數量統計,上下文管理器,性能等。所以要保留現有的解釋器同時安裝 Python 3.10,我們可以使用以下方法:wget https://www.python.org/ftp/python/3.10.0/Python-3.10.0a7.tgztar xzvf Python-3.10.0a7.tgzcd Python-3.10.0a7.
  • Python中switch語句怎麼用,問愣了很多人
    今天我們來聊聊switch,斷斷續續的,學習Python編程已經學習很久了,最近要用到分支語句,就習慣性的想到了,switch-case語句,這個在大部分主流程式語言中都有,如C,C++,C#,Java等等。但是作為python編程愛好者的我,竟然剛剛才發現python語言中居然沒有switch-case語句!!
  • 編程入門第六課,交換語句(switch,case)
    今天福哥會給童鞋們講講交換語句(switch,case)的使用方法,交換語句適合對一個變量的值等於不同內容的時候進行不同處理的情況。其實來說交換語句(switch,case)完全可以通過條件語句(if)來替代,不過使用交換語句可以有更高的執行效率,還可以讓代碼結構看起來更加清晰,所以如果情況適合的時候福哥還是推薦使用交換語句來編寫代碼2.
  • 如何理解 python中的switch
    python相比較其他語言像java,c++之類的還是更容易理解和使用的。我覺得比較奇怪的就是switch和lambda,當然其他也還有一些難點,現在我就來分析一下switch的用法。我們以加減和一個隨意名字的函數來解析switch的用法,說白了也是很簡答嗎的。
  • python語法基礎
    學一門語言,基礎語法一定要紮實。很多入門的編程書籍,都會花大量的篇幅來介紹基礎語法,對於毫無編程經驗的新手而言,這樣的書籍無疑是很友好的,但是對於有編程經驗的開發者而言,很多的基礎語法是通用的, 只需花費較少的時間瀏覽下基礎語法,將精力集中在語言獨有的特徵上即可。
  • ​Python3.8新語法:海象運算符
    Python3.8引入了一種叫做海象運算符(walrus)的新語法(譯者註: 對於walrus的翻譯,目前尚未出現對於Python的專門術語翻譯,許多程式設計師試圖繞過多次出現count的情況,甚至不惜使用各種損害可讀性的招數。現在好了,在Python3.8中增加了海象運算符,可以簡化上面的代碼。
  • Python3.10正式版發布! 竟有這些新特性!
    來源:juejin.cn/post/7015590447745613854Python 3.10正式發布,你嘗鮮了嗎?本文參考自 Python官方文檔 :Python Release Python 3.10.0 | Python.org[1]在正值國慶假期人山人海的2021年10月4號,Python官方正式發布了Python3.10.0[2]。作為一隻假期期間宅著不動的coding人,自然是第一時間體驗了一波。
  • 為什麼Python中沒有switch語句?
    作者:pydanny原文:http://www.pydanny.com/why-doesnt-python-have-switch-case.html
  • Python3.8 了解的差不多了吧,Python3.9 新特性了解一下!
    正文共:4946 字 1 圖預計閱讀時間:13 分鐘作者:陳祥安原文有刪改:https://docs.python.org/3.9/whatsnew/3.9.html本文將解釋 Python 3.9 中的新特性,而不是 3.8。有關完整的詳細信息,請參見更改日誌。
  • Python 3.10重磅發布,這5個新特性愛了愛了!
    「ID: python_logic」嗨!大家好,我是酷頭歡迎來到學習python的寶藏基地~~~前兩天,Python官網發布了Python3.10.0。說實話,對於這次的升級,有幾個特性,還真是值得和大家講講。1.