最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python match語句的具體使用

 更新時間:2023年04月20日 16:03:39   作者:TalorSwfit20111208  
match語句接受一個表達式,并將其值與作為一個或多個case塊給出的連續(xù)模式進行比較,本文主要介紹了Python match語句的具體使用,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

python 3.10支持match語句,3,10以下不支持。

match語句接受一個表達式,并將其值與作為一個或多個case塊給出的連續(xù)模式進行比較。這表面上類似于C、Java或JavaScript(以及許多其他語言)中的switch語句,但更類似于Rust或Haskell等語言中的模式匹配。只有第一個匹配的模式才會被執(zhí)行,它還可以將值中的組件(序列元素或對象屬性)提取到變量中。

最簡單的形式是將一個目標值與一個或多個字面值進行比較:

def http_error(status):
    match status:
        case 400:
            return "Bad request"
        case 404:
            return "Not found"
        case 418:
            return "I'm a teapot"
        case _:
            return "Something's wrong with the internet"

注意最后一個代碼塊:“變量名” _ 被作為 通配符 并必定會匹配成功。 如果沒有 case 語句匹配成功,則不會執(zhí)行任何分支。

使用 | (“ or ”)在一個模式中可以組合多個字面值:

case 401 | 403 | 404:
    return "Not allowed"

模式的形式類似解包賦值,并可被用于綁定變量:

# point is an (x, y) tuple
match point:
    case (0, 0):
        print("Origin")
    case (0, y):
        print(f"Y={y}")
    case (x, 0):
        print(f"X={x}")
    case (x, y):
        print(f"X={x}, Y={y}")
    case _:
        raise ValueError("Not a point")

請仔細研究此代碼! 第一個模式有兩個字面值,可以看作是上面所示字面值模式的擴展。但接下來的兩個模式結合了一個字面值和一個變量,而變量 綁定 了一個來自目標的值(point)。第四個模式捕獲了兩個值,這使得它在概念上類似于解包賦值 (x, y) = point。

如果使用類實現數據結構,可在類名后加一個類似于構造器的參數列表,這樣做可以把屬性放到變量里:

class Point:
    x: int
    y: int
 
def where_is(point):
    match point:
        case Point(x=0, y=0):
            print("Origin")
        case Point(x=0, y=y):
            print(f"Y={y}")
        case Point(x=x, y=0):
            print(f"X={x}")
        case Point():
            print("Somewhere else")
        case _:
            print("Not a point")

可在 dataclass 等支持屬性排序的內置類中使用位置參數。還可在類中設置 __match_args__ 特殊屬性為模式的屬性定義指定位置。如果它被設為 ("x", "y"),則以下模式均為等價的,并且都把 y 屬性綁定到 var 變量:

Point(1, var)
Point(1, y=var)
Point(x=1, y=var)
Point(y=var, x=1)

讀取模式的推薦方式是將它們看做是你會在賦值操作左側放置的內容的擴展形式,以便理解各個變量將會被設置的值。 只有單獨的名稱(例如上面的 var)會被 match 語句所賦值。 帶點號的名稱 (例如 foo.bar)、屬性名稱(例如上面的 x= 和 y=)或類名稱(通過其后的 "(...)" 來識別,例如上面的 Point)都絕不會被賦值。

模式可以任意地嵌套。例如,如果有一個由點組成的短列表,則可使用如下方式進行匹配:

match points:
    case []:
        print("No points")
    case [Point(0, 0)]:
        print("The origin")
    case [Point(x, y)]:
        print(f"Single point {x}, {y}")
    case [Point(0, y1), Point(0, y2)]:
        print(f"Two on the Y axis at {y1}, {y2}")
    case _:
        print("Something else")

為模式添加成為守護項的 if 子句。如果守護項的值為假,則 match 繼續(xù)匹配下一個 case 語句塊。注意,值的捕獲發(fā)生在守護項被求值之前:

match point:
    case Point(x, y) if x == y:
        print(f"Y=X at {x}")
    case Point(x, y):
        print(f"Not on the diagonal")

match 語句的其他特性:

  • 與解包賦值類似,元組和列表模式具有完全相同的含義,并且實際上能匹配任意序列。 但它們不能匹配迭代器或字符串。
  • 序列模式支持擴展解包操作:[x, y, *rest] 和 (x, y, *rest) 的作用類似于解包賦值。 在 * 之后的名稱也可以為 _,因此,(x, y, *_) 可以匹配包含至少兩個條目的序列,而不必綁定其余的條目。
  • 映射模式:{"bandwidth": b, "latency": l} 從字典中捕獲 "bandwidth" 和 "latency" 的值。與序列模式不同,額外的鍵會被忽略。**rest 等解包操作也支持。但 **_ 是冗余的,不允許使用。

使用 as 關鍵字可以捕獲子模式:

case (Point(x1, y1), Point(x2, y2) as p2): ...

將把輸入的第二個元素捕獲為 p2 (只要輸入是包含兩個點的序列)

大多數字面值是按相等性比較的,但是單例對象 True, False 和 None 則是按標識號比較的。

模式可以使用命名常量。 這些命名常量必須為帶點號的名稱以防止它們被解讀為捕獲變量:

from enum import Enum
class Color(Enum):
    RED = 'red'
    GREEN = 'green'
    BLUE = 'blue'
 
color = Color(input("Enter your choice of 'red', 'blue' or 'green': "))
 
match color:
    case Color.RED:
        print("I see red!")
    case Color.GREEN:
        print("Grass is green")
    case Color.BLUE:
        print("I'm feeling the blues :(")

到此這篇關于Python match語句的具體使用的文章就介紹到這了,更多相關Python match內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Django 實現圖片上傳和顯示過程詳解

    Django 實現圖片上傳和顯示過程詳解

    這篇文章主要介紹了Django 實現圖片上傳和顯示過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • Python操作MySQL簡單實現方法

    Python操作MySQL簡單實現方法

    這篇文章主要介紹了Python操作MySQL簡單實現方法,通過一個簡單的實例講述了Python針對mysql數據庫的增刪改查技巧,需要的朋友可以參考下
    2015-01-01
  • python辦公自動化之讀取本地OUTLOOK客戶端郵件

    python辦公自動化之讀取本地OUTLOOK客戶端郵件

    這篇文章主要為大家詳細介紹了如何使用python實現讀取本地OUTLOOK客戶端郵件,文中的示例代碼講解詳細,具有一定的參考價值,需要的小伙伴可以了解下
    2023-10-10
  • 使用Pandas實現MySQL窗口函數的解決方法

    使用Pandas實現MySQL窗口函數的解決方法

    本文主要介紹 MySQL 中的窗口函數row_number()、lead()/lag()、rank()/dense_rank()、first_value()、count()、sum()如何使用pandas實現,同時二者又有什么區(qū)別,感興趣的朋友一起看看吧
    2023-02-02
  • 教你利用pygame模塊制作跳躍小球小游戲

    教你利用pygame模塊制作跳躍小球小游戲

    pygame是一個專門設計來進行游戲開發(fā)設計的Python模塊,因為擺脫了被低級語言(如機器語言和匯編語言)的束縛,使用起來非常的簡單,這篇文章主要給大家介紹了關于如何利用pygame模塊制作跳躍小球小游戲的相關資料,需要的朋友可以參考下
    2021-08-08
  • Python入門

    Python入門

    Python入門...
    2007-02-02
  • 10個Python中python_docx庫的實用案例分享

    10個Python中python_docx庫的實用案例分享

    在日常辦公和文檔處理中,Word文檔是我們最常用的格式之一,Python通過python?-?docx庫能夠實現對Word文檔的各種自動化操作,本文為大家準備了10個常用的案例,希望對大家有所幫助
    2025-02-02
  • Matplotlib子圖的創(chuàng)建的實現

    Matplotlib子圖的創(chuàng)建的實現

    本文主要介紹了Matplotlib子圖的創(chuàng)建的實現,包括fig.add_axes()創(chuàng)建子圖和plt.axes創(chuàng)建子圖這兩種方法,具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • Python工程師面試題 與Python Web相關

    Python工程師面試題 與Python Web相關

    這篇文章主要為大家分享了Python工程師面試題,面試題的內容主要與Python Web相關,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-01-01
  • Django模塊學習之模塊語言詳解

    Django模塊學習之模塊語言詳解

    模板語言渲染的整個過程其實就是將html轉換成函數,并為該函數提供全局變量,然后執(zhí)行該函數,下面這篇文章主要給大家介紹了關于Django模塊學習之模塊語言的相關資料,需要的朋友可以參考下
    2021-11-11

最新評論

周口市| 禄丰县| 积石山| 满城县| 滨州市| 衡阳县| 衡阳市| 南澳县| 定州市| 四川省| 宜州市| 进贤县| 明水县| 政和县| 方正县| 察隅县| 双桥区| 宁国市| 罗源县| 巴楚县| 德阳市| 台安县| 九龙城区| 宝兴县| 崇义县| 柯坪县| 张家界市| 济源市| 岚皋县| 兴化市| 洛隆县| 台东市| 凉山| 灌南县| 肥西县| 黎川县| 普兰店市| 德清县| 平遥县| 镇远县| 石屏县|