Ray*_*ger 46
我们在某一点上考虑过它,但是如果没有办法声明命名常量,就无法生成有效的跳转表.所以我们剩下的就是语法糖,我们可以用if-elif-elif-else链做.
大致的理由是,各种提案未能实现人们对切换案例的预期,并且他们未能改进现有的解决方案(如基于字典的调度,if-elif-chains,基于getattr的调度,或者老式的多态性调度到具有相同方法的不同实现的对象).
div*_*nex 10
2021 年更新:casePython 3.10 中引入
结构模式匹配包含在2021 年 10 月发布的Python 3.10中。
这是通用语法
match subject:
case <pattern_1>:
<action_1>
case <pattern_2>:
<action_2>
case <pattern_3>:
<action_3>
case _:
<action_wildcard>
Run Code Online (Sandbox Code Playgroud)
这是一个简单的例子
def http_error(status):
match status:
case 400:
return "Bad request"
case 404:
return "Not found"
case 418:
return "I'm a teapot"
case _:
return "Something's wrong with the Internet"
Run Code Online (Sandbox Code Playgroud)
文档中有一节可以回答这个问题.见下文:
TL; DR:现有的替代方案(动态调度通过getattr或dict.get,if/ elif链)覆盖所有用例.
小智 5
def f(x):
return {
1 : 'output for case 1',
2 : 'output for case 2',
3 : 'output for case 3'
}.get(x, 'default case')
Run Code Online (Sandbox Code Playgroud)
您可以将其用作python中的切换条件,如果条件不匹配,则如果条件不匹配,它将返回默认值
| 归档时间: |
|
| 查看次数: |
25589 次 |
| 最近记录: |