Abh*_*kar 4 python isinstance python-3.10 structural-pattern-matching
PEP 622引入了match声明作为if-elif-else. 然而,我在提案或任何在线材料中找不到的一件事是该match声明是否可以用作表达式而不仅仅是作为声明。
举几个例子可以清楚地说明这一点:
示例1:
def make_point_2d(pt):
match pt:
case (x, y):
return Point2d(x, y)
case _:
raise TypeError("not a point we support")
Run Code Online (Sandbox Code Playgroud)
示例2:
match response.status:
case 200:
do_something(response.data)
case 301 | 302:
retry(response.location)
Run Code Online (Sandbox Code Playgroud)
在第一个示例中,函数从子句内部返回case,而在第二个示例中,不返回任何内容。但我希望能够做类似以下假设示例的事情:
spouse = match name:
case "John":
"Jane"
case "David":
"Alice"
print(spouse)
Run Code Online (Sandbox Code Playgroud)
但它无法编译。
不可以,match 语句不能用作表达式。
PEP 622 的“被拒绝的想法”部分对此进行了解决:
让它成为一个表达
在大多数其他语言中,模式匹配由表达式而不是语句表示。但将其设为表达式将与 Python 中的其他语法选择不一致。所有决策逻辑几乎都以陈述的形式表达,因此我们决定不偏离这一点。
| 归档时间: |
|
| 查看次数: |
386 次 |
| 最近记录: |