为何Python两个match case示例结果不同?str()与''相等却行为有别
Python match case:
str()和''匹配结果不同的原因 这俩写法在match case里是完全不同的匹配逻辑,和str() == ''这个等式没有关系,具体拆解:
1. case str()是类型匹配模式
在match的语法规则里,str()这种写法用于匹配所有字符串类型的对象,不管字符串的具体内容是什么。只要被匹配的对象是str类型,就会命中这个分支。'ciao'属于字符串类型,所以直接匹配成功,输出'string'。
2. case ''是字面量精确匹配模式
这个分支只会匹配**值完全等于空字符串''**的对象。'ciao'的内容是'ciao',和''不相等,所以不会触发这个分支,转而执行case _的默认分支,输出'default'。
别被assert str() == ''误导
单独调用str()确实会返回空字符串,但在match的case分支里,str()是语法层面的特殊处理——它不是调用函数拿返回值来匹配,而是表示“匹配str类型的所有实例”,和str()函数的返回值没有关联。
可以用以下代码进一步验证:
# 非字符串不会匹配str()分支 match 456: case str(): print('string') case _: print('default') # 输出: default # 只有值为''才会匹配字面量分支 match '': case '': print('empty string') case _: print('default') # 输出: empty string
内容的提问来源于stack exchange,提问作者Dario Colombotto
相关产品推荐
相关产品推荐

