如何在Python中实现switch case语句

发布于:2021-01-21 16:09:04

0

370

0

Switch Python case

Switch case语句是一个强大的编程特性,它允许您基于变量或表达式的值来控制程序流。您可以使用它来执行不同的代码块,具体取决于运行时的变量值。下面是Java中switch语句的一个示例。

public static void switch_demo(String[] args) {

       int month = 8;
       String monthString;
       switch (month) {
           case 1:  monthString = "January";
                    break;
           case 2:  monthString = "February";
                    break;
           case 3:  monthString = "March";
                    break;
           case 4:  monthString = "April";
                    break;
           case 5:  monthString = "May";
                    break;
           case 6:  monthString = "June";
                    break;
           case 7:  monthString = "July";
                    break;
           case 8:  monthString = "August";
                    break;
           case 9:  monthString = "September";
                    break;
           case 10: monthString = "October";
                    break;
           case 11: monthString = "November";
                    break;
           case 12: monthString = "December";
                    break;
           default: monthString = "Invalid month";
                    break;
       }
       System.out.println(monthString);
}

其工作原理如下:

  1. 编译器为switch case语句生成一个跳转表。

  2. switch variable/expression被求值一次。

  3. switch语句在跳转表中查找求值的变量/表达式,并直接决定执行哪个代码块。

  4. 如果没有找到匹配项,则执行默认case下的代码。

在上述示例中,根据变量month的值,标准输出中将显示不同的消息。在本例中,由于月份=8,所以将以标准输出打印“August”。

Switch语句

尽管像Java和PHP这样的流行语言都有内置的switch语句,但是您可能会惊讶地发现Python语言没有switch语句。因此,您可能会尝试使用一系列if-else-if块,为switch语句的每个case使用if条件。

但是,由于跳转表,switch语句比if-else-if梯形图快得多。它不必按顺序计算每个条件,只需查找一次已计算的变量/表达式,然后直接跳转到相应的代码分支来执行它

如何在Python中实现switch语句

Pythonic实现switch语句的方法是使用强大的字典映射(也称为关联数组),它们提供简单的一对一键值映射。

下面是上述switch语句的Python实现。在下面的示例中,我们创建一个名为switcher的字典来存储所有类似switch的案例。

def switch_demo(argument):
   switcher = {
       1: "January",
       2: "February",
       3: "March",
       4: "April",
       5: "May",
       6: "June",
       7: "July",
       8: "August",
       9: "September",
       10: "October",
       11: "November",
       12: "December"
   }
   print switcher.get(argument, "Invalid month")

在上面的示例中,当您将一个参数传递给switch_demo函数时,它将对照switcher字典映射进行查找。如果找到匹配项,则打印相关值,否则打印默认字符串(“无效月份”)。默认字符串有助于实现switch语句的“defaultcase”。

函数的字典映射

在这里它变得更有趣。Python字典的值可以是任何数据类型。因此,您不必局限于使用常量(整数、字符串),还可以使用函数名和lambda作为值。

例如,还可以通过创建函数名作为值的字典来实现上述switch语句。在本例中,switcher是函数名的字典,而不是字符串。

def one():
   return "January"

def two():
   return "February"

def three():
   return "March"

def four():
   return "April"

def five():
   return "May"

def six():
   return "June"

def seven():
   return "July"

def eight():
   return "August"

def nine():
   return "September"

def ten():
   return "October"

def eleven():
   return "November"

def twelve():
   return "December"


def numbers_to_months(argument):
   switcher = {
       1: one,
       2: two,
       3: three,
       4: four,
       5: five,
       6: six,
       7: seven,
       8: eight,
       9: nine,
       10: ten,
       11: eleven,
       12: twelve
   }
   # Get the function from switcher dictionary
   func = switcher.get(argument, lambda: "Invalid month")
   # Execute the function
   print func()

尽管上面的函数非常简单并且只返回字符串,但是您可以使用这种方法在每个函数中执行复杂的代码块。

Python方法的优点

因为您可以在运行时更改Python字典(添加、删除或更新键值对),所以您可以轻松地动态更改switch语句。举个例子:

def zero():
   return "zero"

def one():
   return "one"

def two():
   return "two"

switcher = {
       0: zero,
       1: one,
       2: two
   }


def numbers_to_strings(argument):
   # Get the function from switcher dictionary
   func = switcher.get(argument, "nothing")
   # Execute the function
   return func()

Input: numbers_to_strings(1)
Output: One

Input: switcher[1]=two #changing the switch case
Input: numbers_to_strings(1)
Output: Two

Switch case是一个非常有用的编程构造,它不仅提供了比if-else语句更好的性能,还为您提供了更易于管理的代码。如果您觉得Python中缺少switch语句有局限性,那么希望上面的教程能够帮助您实现它。