gus*_*rom 43 python pattern-matching python-3.10
Python 3.10 中新的结构模式匹配功能是一个非常受欢迎的功能。有没有办法使用这个语句来匹配不等式?原型示例:
match a:
case < 42:
print('Less')
case == 42:
print('The answer')
case > 42:
print('Greater')
Run Code Online (Sandbox Code Playgroud)
Aja*_*234 55
您可以使用守卫:
match a:
case _ if a < 42:
print('Less')
case _ if a == 42:
print('The answer')
case _ if a > 42:
print('Greater')
Run Code Online (Sandbox Code Playgroud)
另一种选择,没有防护,使用纯模式匹配:
match [a < 42, a == 42]:
case [True, False]:
print('Less')
case [_, True]:
print('The answer')
case [False, False]:
print('Greater')
Run Code Online (Sandbox Code Playgroud)
在此示例中,使用 good ol' if-elif 更简单,即使这意味着重复变量名称。
if a < 42:
print('Less')
elif a == 42:
print('The answer')
elif a > 42:
print('Greater')
Run Code Online (Sandbox Code Playgroud)
PS 使用托马斯·索利(Thomas Sollie)的答案中的枚举和比较函数有利于为程序添加更多结构,但对于基本脚本等来说似乎有点矫枉过正。
说到代码风格,请避免使用幻数:如果42代码中的所有三个代表相同的事物,请为其命名,例如:
the_answer = 42
if a < the_answer:
...
Run Code Online (Sandbox Code Playgroud)
小智 6
match-case 语句本质上是为匹配相等性而设计的(因此称为“match”)。在您的原型示例中,您可以通过匹配 if 子句(如其他答案所提议的)来实现这一点,但是现在您本质上只是匹配 True 和 False,这似乎是多余的。
其他语言解决此问题的一种方法是通过使用枚举进行比较:
from enum import Enum
class Ordering(Enum):
LESS = 1
EQUAL = 2
GREATER = 3
def compare(a, b):
if a < b:
return Ordering.LESS
elif a == b:
return Ordering.EQUAL
elif a > b:
return Ordering.GREATER
match compare(a, 42):
case Ordering.LESS:
print("Less")
case Ordering.EQUAL:
print("The answer")
case Ordering.GREATER:
print("Greater")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12269 次 |
| 最近记录: |