【问题标题】:How does Python 3.10 match compares 1 and True?Python 3.10 match 如何比较 1 和 True?
【发布时间】:2021-12-03 05:58:16
【问题描述】:

PEP 622, Literal Patterns 说如下:

注意,由于使用了等式(__eq__),以及布尔值与整数0和1的等价性,所以以下两者没有实际区别:

case True:
    ...

case 1:
    ...

True.__eq__(1)(1).__eq__(True) 都返回True,但是当我用CPython 运行这两个代码sn-ps 时,似乎case Truecase 1 不一样。

$ python3.10
>>> match 1:
...     case True:
...         print('a')  # not executed
... 
>>> match True:
...     case 1:
...         print('a')  # executed
... 
a

1True 实际上是如何比较的?

【问题讨论】:

    标签: python python-3.x pattern-matching python-3.10


    【解决方案1】:

    查看模式匹配规范,这属于"literal pattern"

    如果主题值比较等于 由字面量表示的值,使用以下比较规则:

    • 使用 == 运算符比较数字和字符串。
    • 使用 is 比较单例文字 None、True 和 False 运算符。

    所以当模式是:

     case True:
    

    它使用is,而1 is True 为假。另一方面,

    case 1:
    

    使用==1 == True 为真。

    【讨论】:

    • 我不知道 PEP 会被 Superseded-By 覆盖。谢谢你的回答!
    猜你喜欢
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 2015-08-31
    • 1970-01-01
    • 2022-11-30
    • 2019-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多