Python 开关语句

介绍

switch 语句是控制程序流程的强大且方便的工具。它允许您根据给定变量或表达式的值快速轻松地创建多个代码分支。当您需要根据给定变量的值执行不同的逻辑时,通常会使用它,该变量可以有超过 2 个(但数量有限)的值。

在本文中,我们将探讨如何在 Python 中使用 switch 语句,并讨论它相对于其他控制结构的优势。无论您是 Python 新手还是经验丰富的开发人员,switch 语句都可以帮助您编写更清晰、更高效的代码。

v3.10之前

在 Python switch 语句在该语言中原生可用之前,程序员必须使用其他控制结构来实现相同的功能。一种常见的方法是使用一系列 if-else 语句,每个代码分支与被测试变量的不同值相关联。

例如,考虑以下代码:

value = "foo"

if value == "foo":
    print("foo was selected")
elif value == "bar":
    print("bar was selected")
else:
    print("Nothing valid was selected")

在此代码中,我们使用 if-else 语句根据变量的值确定要执行哪个代码分支 value。 如果 value 等于“foo”,将执行代码的第一个分支。如果 value 等于“bar”,将执行第二个代码分支。否则,代码中的 else 块将被执行。

虽然这种方法有效,但随着变量可能值的数量增加,它很快就会变得笨拙。此外,它还会使代码难以阅读和理解。

另一种可用于在 Python 中创建类似 switch 语句的方法是使用字典。在这种方法中,字典的键是被测试变量的可能值,而值是相应的代码分支。

例如,考虑以下代码:

value = "foo"

switch = {
    "foo": lambda: print("foo was selected"),
    "bar": lambda: print("bar was selected"),
    "default": lambda: print("Nothing valid was selected"),
}

switch.get(value, "default")()

在此代码中,我们定义了一个名为的字典 switch,键代表变量的可能值 value。对于每个键,我们分配了一个 lambda 函数作为值,其中包含相应的代码分支。为了执行适当的代码分支,我们使用 get() 字典的方法,它允许我们指定在字典中不存在给定键时使用的默认值。

虽然这种方法比使用 if-else 语句更加灵活和紧凑,但它仍然难以阅读和理解,尤其是在每个分支中的代码都很复杂的情况下。此外,它需要使用 lambda 函数,这可能会让一些程序员感到困惑。我们不建议使用此方法,除非由于某种原因您无法使用本文中的其他方法。

随着 Python v3.10 中引入 Python switch 语句,程序员现在可以更方便、直观地根据给定变量或表达式的值来控制程序流程。在下一节中,我们将探讨如何在 Python 中使用实际的 switch 语句。

match/case 声明(v3.10之后)

在 Python v3.10 之后,switch 语句使用 match 关键词。此关键字用于创建模式匹配表达式,它允许您根据一系列模式测试给定变量或表达式的值。如果找到匹配,则执行相应的代码分支。

例如,考虑以下代码:

value = "foo"

match value:
    case "foo":
        print("foo was selected")
    case "bar":
        print("bar was selected")
    case _:
        print("Nothing valid was selected")

查看我们的 Git 学习实践指南,其中包含最佳实践、行业认可的标准以及随附的备忘单。 停止谷歌搜索 Git 命令,实际上 学习 它!

在此代码中,我们使用 match 关键字创建模式匹配表达式,该表达式测试变量的值 value 针对一系列模式。如果 value 等于“foo”,将执行代码的第一个分支。如果 value 等于“bar”,将执行第二个代码分支。否则,将执行else块中的代码。

跌倒

Python 中的 switch 语句与其他语言中的传统 switch 语句之间的主要区别之一是 Python 的 match 声明不支持失败。换句话说,一旦找到匹配并执行相应的代码分支, match 表达式结束并且没有其他代码 match 语句被执行。在其他语言中,这通常是通过使用 break 关键字,此处不需要或不支持。

如果您想实现与传统 switch 语句中的fall-through相同的行为,您可以使用 | 运算符来匹配多个案例。该运算符允许您在单个中指定多个模式 case,并且可以匹配任何模式来触发该分支的执行。

例如,考虑以下代码:

value = "y"

match value:
    case "yes" | "y":
        print("The user confirmed")
    case _:
        print("The user denied")

这里,如果值 value 等于“是” or “y”,将执行代码的第一个分支。这相当于传统 switch 语句中的失败行为。

默认值

正如您可能从上面的示例中注意到的,“默认”情况是使用下划线处理的(_)。这被视为“通配符”并匹配所有值。如果前面的情况之一与该值匹配,则将跳过默认代码分支并且不执行。

结论

正如您所看到的,Python match(又名“switch”)语句提供了一种强大且方便的方法来控制程序流程。无论您是 Python 新手还是经验丰富的开发人员,switch 语句都可以帮助您编写更清晰、更高效的代码。

时间戳记:

更多来自 堆栈滥用