天天看點

python最新文法match比對模式題目

作者:SuperOps
python最新文法match比對模式題目

題目說明

題目如圖,運作環境python3.10

A)  This list has TWO items
B) 5 5
C) Something else
D) 9 7
E) None of the abpve           

答案是 E. 以上都不對。

實際輸出是:

This list has TWO items!
9 7           

題目解說

這個問題涉及到 Python 3.10 中引入的模式比對特性。腳本使用 match 語句來比對所提供的序列中的模式。

函數 matcher​ 接受一個名為 sequence​ 的參數。在函數内部,兩個變量 a​ 和 b​ 被初始化為值 5​。

match​ 語句用于比對 sequence​ 和不同的模式。模式按照定義的順序進行檢查。

當使用 matcher([9, 7])​ 調用函數時,序列 [9, 7]​ 會與模式進行比對。

第一個模式檢查序列是否為空清單。由于 [9, 7]​ 不是空的,是以這個模式被跳過。

第二個模式檢查序列是否隻有一個項,并将這個項指派給變量 a​。由于序列有兩個項,是以這個模式也被跳過。

第三個模式檢查序列是否有兩個項,并将這兩個項分别指派給變量 a​ 和 b​。這個模式比對了,是以相應的代碼塊被執行。此代碼塊内的列印語句輸出了"This list has TWO items!"。

Python 中模式比對的行為允許綁定名稱。在第三個模式中,變量 a​ 和 b​ 被綁定到分别對應的值 9​ 和 7​。這就是為什麼後續的列印語句輸出了 9 7​。

第四個模式是通配符模式,表示比對任何沒有比對前面模式的序列。然而,由于我們的序列已經比對了第三個模式,這個代碼塊不會被執行。

總結起來,輸出 "這個清單有兩個項!" 是因為序列 [9, 7]​ 比對了第三個模式。然後,值 9​ 和 7​ 被綁定到變量 a​ 和 b​,并在下一條語句中列印出來。

python3.10 match文法回顧

當談到 Python 3.10 的新特性時,match 文法無疑是一個備受關注的亮點。match 文法為開發者提供了一種簡單而強大的模式比對方式,使代碼編寫更加簡潔、易讀。下面我們将介紹 match 文法的各種用法,并附帶代碼示例,幫助你更好地了解和應用這一新特性。

基本模式比對:

  • 比對常量模式:使用常量值進行比對。
match value:
    case 1:
        # 執行比對到常量值為1的代碼
    case 2:
        # 執行比對到常量值為2的代碼
    case _:
        # 執行其他情況的代碼           
  • 比對變量模式:使用變量進行比對,并将比對結果綁定到變量。
match value:
    case 'apple':
        # 執行比對到值為'apple'的代碼
    case fruit:
        # 執行比對到其他變量值的代碼,并使用變量名進行引用           
  • 比對類型模式:使用類型進行比對,可以是内置類型或自定義類型。
match value:
    case int:
        # 執行比對到整數類型的代碼
    case str:
        # 執行比對到字元串類型的代碼
    case Point(x, y):
        # 執行比對到自定義類型 Point 的代碼,并提取 x 和 y 坐标           
  • 使用 or 關鍵字進行模式組合,比對任一模式即可。
match value:
    case 1 or 2:
        # 執行比對到值為1或2的代碼
    case 'apple' or 'orange':
        # 執行比對到值為'apple'或'orange'的代碼           
  • 使用 and 關鍵字進行模式組合,同時比對多個模式。
match value:
    case int and value > 0:
        # 執行比對到正整數的代碼
    case str and len(value) > 5:
        # 執行比對到長度大于5的字元串的代碼           
  • 使用 as 關鍵字進行模式組合,同時綁定變量并進行比對。
match value:
    case Point(x as 0, y):
        # 執行比對到 x 值為0的 Point 類型的代碼,并提取 y 坐标
    case Point(x, y as 0):
        # 執行比對到 y 值為0的 Point 類型的代碼,并提取 x 坐标           
  • 在模式比對中添加額外的條件判斷。
match value:
    case int and value > 0 if condition:
        # 執行比對到滿足條件的正整數的代碼
    case str and len(value) > 5 if condition:
        # 執行比對到滿足條件的長度大于5的字元串的代碼           
  • 清單模式比對:比對清單中元素的模式
match value:
    case [1, 2, 3]:
        # 執行比對到清單為 [1, 2, 3] 的代碼
    case [1, x, 3]:
        # 執行比對到清單中間元素為 x 的代碼
    case [1, *_]:
        # 執行比對到以1開頭的清單的代碼,并忽略後續元素           
  • 元組模式比對:比對元組中的模式。
match value:
    case (1, 2):
        # 執行比對到元組為 (1, 2) 的代碼
    case(1, x):
        # 執行比對到元組第一個元素為1,第二個元素為 x 的代碼
    case (1, *_):
        # 執行比對到以1開頭的元組的代碼,并忽略後續元素           
  • 自定義類型模式比對:比對自定義類型的模式。
class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

match value:
    case Point(0, 0):
        # 執行比對到坐标為 (0, 0) 的 Point 類型的代碼
    case Point(x, y):
        # 執行比對到任意坐标的 Point 類型的代碼,并提取 x 和 y 坐标           
  • 内置類型模式比對:比對内置類型的模式。
match value:
    case int as num:
        # 執行比對到整數類型的代碼,并将值綁定到 num 變量
    case str as text:
        # 執行比對到字元串類型的代碼,并将值綁定到 text 變量           

這些示例覆寫了 match 文法的基本用法和一些常見的模式比對技巧。通過靈活運用這些特性,你可以簡化代碼,并提高代碼的可讀性和可維護性。記得在實際應用中結合具體場景和需求,發揮 match 文法的優勢。

了解更多python實用技巧,可以進入我的技術專欄了解更多python有用的知識點