实例教会大家如何用Python里实现Switch相同效果
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);}
这是Java中的switch语句的示例
Switchcase事情事理是:
1. 编译器为switch case语句天生一个跳转表
2. Switch变量/表达式被评估一次
3. Switch语句在跳转表中查找已打算的变量/表达式,并直接决定实行哪个代码块。
4. 如果未找到匹配项,则实行默认情形下的代码
在上面的示例中,根据变量的值,month标准输出中将显示不同的。在这种情形下,由于月份= 8,\公众8月\"大众将以标准输出打印。
Python编程措辞简介
当Guido van Rossum开拓Python时,他希望创建一种\公众大略\公众的编程措辞,绕过其他系统的漏洞。由于大略的语法和繁芜的句法短语,该措辞已成为各种科学运用的标准,如机器学习。
机器学习
Switch语句
虽然Java和PHP等盛行措辞都有内置的switch语句,但您可能会惊异地创造Python措辞没有。因此,您可能会考试测验利用一系列if-else-if块,对switch语句的每种情形利用if条件。
但是,由于跳转表,switch语句比if-else-if梯形图快得多。它不是按顺序评估每个条件,而只须要查找一次打算的变量/表达式,然后直接跳转到相应的代码分支来实行它。
如何在Python中实现switch语句
Pythonic实现switch语句的方法是利用强大的字典映射,也称为关联数组,它供应大略的一对一键值映射。这是上面的switch语句的Python实现。不才面的示例中,我们创建一个名为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()
在上面的示例中,当您将参数通报给switch_demo函数时,会根据switcher字典映射进行查找。如果找到匹配项,则打印关联值,否则将打印默认字符串(\"大众无效月份\"大众)。默认字符串有助于实现switch语句的\"大众默认情形\"大众。
函数的字典映射
这是它变得更有趣的地方。Python字典的值可以是任何数据类型。因此,不必局限于利用常量(整数,字符串),您还可以利用函数名称和lambdas作为值。
例如,还可以通过创建函数名称字典作为值来实现上述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()
虽然上述函数非常大略并且只返回字符串,但您可以利用此方法在每个函数中实行风雅的代码块。实际上,如果要在工具上调用方法,乃至可以利用调度方法动态确定在运行时须要调用哪个函数。
class Switcher(object): def numbers_to_months(self, argument): \"大众\"大众\公众Dispatch method\"大众\"大众\"大众 method_name = 'month_' + str(argument) # Get the method from 'self'. Default to a lambda. method = getattr(self, method_name, lambda: \公众Invalid month\公众) # Call the method as we return it return method() def month_1(self): return \"大众January\"大众 def month_2(self): return \公众February\"大众 def month_3(self): return \"大众March\"大众 ...
基于通报的参数,内置getattr()函数将检索具有特定名称的工具方法。
Input: a=Switcher()Input: a.numbers_to_months(1)Output: January
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 caseInput: numbers_to_strings(1)Output: Two
Switch case是一个非常有用的编程构造,它不仅供应比if-else语句更好的性能,而且还供了更易于管理的代码。如果您觉得受到Python中短缺switch语句的限定,那么希望上面的教程可以帮助您。