PEP622 #Literal patterns說明如下:
請注意,由于使用了相等性 (__eq__),以及布林值與整數 0 和 1 之間的等價性,因此以下兩者之間沒有實際區別:
case True: ... case 1: ...
andTrue.__eq__(1)和(1).__eq__(True)都回傳 True,但是當我用 CPython 運行這兩個代碼片段時,它似乎case True和case 1不一樣。
$ python3.10
>>> match 1:
... case True:
... print('a') # not executed
...
>>> match True:
... case 1:
... print('a') # executed
...
a
實際上如何比較 1 和 True?
uj5u.com熱心網友回復:
查看模式匹配規范,這屬于“文字模式”:
如果主題值比較等于文字表達的值,則文字模式成功,使用以下比較規則:
- 數字和字串使用 == 運算子進行比較。
- 使用 is 運算子比較單例文本 None、True 和 False。
所以當模式是:
case True:
它使用is, 并且1 is True是假的。另一方面,
case 1:
使用==,并且1 == True是真的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/315074.html
