发布于:2021-01-21 16:09:04
0
370
0
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);
}
其工作原理如下:
编译器为switch case语句生成一个跳转表。
switch variable/expression被求值一次。
switch语句在跳转表中查找求值的变量/表达式,并直接决定执行哪个代码块。
如果没有找到匹配项,则执行默认case下的代码。
在上述示例中,根据变量month
的值,标准输出中将显示不同的消息。在本例中,由于月份=8,所以将以标准输出打印“August”。
Switch语句
尽管像Java和PHP这样的流行语言都有内置的switch语句,但是您可能会惊讶地发现Python语言没有switch语句。因此,您可能会尝试使用一系列if-else-if块,为switch语句的每个case使用if条件。
但是,由于跳转表,switch语句比if-else-if梯形图快得多。它不必按顺序计算每个条件,只需查找一次已计算的变量/表达式,然后直接跳转到相应的代码分支来执行它。
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语句有局限性,那么希望上面的教程能够帮助您实现它。
作者介绍