英文:
How to match multiple different cases in Python
问题
使用match
语句,可以为同一个case指定多个模式
match value:
case 1 | 2 | 3:
do_a()
case 4:
do_b()
我想要的是相反的,我想要匹配多个情况,每个情况都执行不同的代码,而只有一个值 - 我的想法是这样的
match value:
case 1 | 2 | 3 | 'all':
do_a()
case 4 | 'all':
do_b()
case 'all':
do_c()
如果value == 'all'
,我想同时运行do_a()
、do_b()
和do_c()
。这可以轻松使用if-else
实现,但我想利用更优雅的match
语句。在其他具有switch
的语言,如Java或C,我可以利用需要显式break
的机制,让后续的情况在第一个匹配后执行。
在Python中,是否有一种机制可以处理这种用例(执行匹配相同值的多个块或'falling through'语句),还是我必须采用简单的条件?
目前,可行的版本是使用简单的if
条件,我尝试了问题中描述的天真方法,但只有第一个匹配块会执行。
英文:
Using the match
statement, one can specify multiple patterns for the same case\
match value:
case 1 | 2 | 3:
do_a()
case 4:
do(b)
What I want to do is the inverse, I want to match multiple cases, each of which executes a different code, with a single value - my idea was something like this
match value:
case 1 | 2 | 3 | 'all':
do_a()
case 4 | 'all':
do(b)
case 'all':
do(c)
I want to run both do_a()
, do_b()
and do_c()
if value=='all'
. This can be easily done with if-else
, but I wanted to make use of the more elegant match
statement. In other languages with switch
, like Java or C, I could abuse the need for explicit break
and let the subsequent cases be executed after the first match.
Is there a mechanism for this use-case in either fashion (executing multiple blocks with matching the same value or 'falling through' the statement) in python, or do I have to settle down for simple conditions?
Currently the working version is with simple if
conditions, I've tried the naive approach described in the problem, but only the first match block executes.
答案1
得分: 1
我相信你能做到的最好是:
匹配值:
情况 'all':
做_a()
做(b)
做(c)
情况 1 | 2 | 3:
做_a()
情况 4:
做(b)
注意顺序。
英文:
I believe the best you can do is:
match value:
case 'all':
do_a()
do(b)
do(c)
case 1 | 2 | 3:
do_a()
case 4:
do(b)
Note the order.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论