无法理解Python的匹配案例
为什么这两个例子给出的结果不一样呢?如果str()
的值是''
(也就是空字符串),那么结果应该是一样的。
# example 1
match 'ciao':
case str():
print('string')
case _:
print('default')
# >>> string
# example 2
match 'ciao':
case '':
print('string')
case _:
print('default')
# >>> default
# but ...
assert str() == ''
1 个回答
4
简而言之,case str():
里面的 类模式 看起来像是一个函数调用,但作为模式,它可以匹配任何字符串,而不仅仅是空字符串。
在这个例子中,str()
其实 不是 一个会返回 ''
的函数调用。相反,它是一个 类模式,这种语法结构只在 match
语句中存在,和看起来相似的表达式有不同的含义。你可以在文档中了解更多关于类模式的信息,简单来说,str()
可以匹配任何 str
的实例。
match 'ciao':
case str():
print('string')
case _:
print('default')
等同于
if isinstance('ciao', str):
print('string')
else:
print('default')
同样,你在第二个 match
语句中的 ''
也不是一个会返回空字符串的表达式(虽然这个区别不那么重要,也不那么明显),而是一个字面模式,它专门用来匹配空字符串。
match 'ciao':
case '':
print('string')
case _:
print('default')
等同于
if 'ciao' == '':
print('string')
else:
print('default')
match
语句的一个强大之处在于,每个 case 可以使用不同类型的模式(实际上,在你的两个例子中,_
是第三种类型,称为通配符模式),所以一般来说,把 match
语句转换成等效的 if
语句并不简单。