在开发软件时使用过 C、 C++和Java 编程语言的计算机软件编程语言工程师使用过 switch-case 语句。但是对于 Python,它们无法使用 switch-case 语句,因为它们没有在 Python 中定义。
在本文中,非常强调 switch case 语句,因为有很多因素可以说明为什么 switch case 语句比 if-else 语句更占优势。这些因素是:
- 与 if-else 阶梯相比,switch 语句的运行速度要快得多。这是因为编译器在编译期间为切换生成的跳转表。作为结果,在执行期间,它不会检查满足哪个案例,而只是决定必须执行哪个案例。
- Switch 语句比 if-else 链更简洁。
- 它们比 if-else 链更好地表达了代码的语义。
- 与 if-else 链相比,它们允许的错误空间更小。
- 它们减少了重复并可能提高性能。
- 与 if-else 语句相比,它提供了更多的可读性。
Python 没有像 C、C++、Java 和 Ruby 那样提供 switch-case 语句,但它提供了一些使这些语句起作用的规定。
例如,Python 使程序员能够创建其代码片段,其工作方式类似于其他编程语言中的 Python Switch case 语句。
本文旨在提供在 Python 中实现 switch-case 语句的方法。
## Python中的switch语句
switch 可以定义为一种控制机制,用于测试存储在变量中的值并执行相应的 case 语句。switch case 语句的作用是在程序中引入控制流,并确保代码不会被多个“if”语句弄乱。因此,代码对查看者来说看起来很勤奋且透明。程序员使用这个奇妙的编程功能在他们的代码中实现控制流。switch case 语句的工作是将 case 语句中指定的值与代码中的变量进行比较。
## 为什么 Python 中没有 Switch-case 语句?
在 Python 中,switch-case 语句不存在,因为提案不令人满意。许多提案都失败了,因为它们不能很好地使用 Python 的语法和既定的编码风格。
大多数编程语言都提供 switch case 函数,因为它们缺乏适当的映射结构,原因是一个值不能映射到函数中。
但在 Python 案例中,借助映射表(dict),可以将某个值映射到某个函数。在性能方面,Python 字典将比任何其他解决方案更有效。
在 Python 中,使用切换器代替 switch case 函数。在 Python 中,切换器也称为字典映射。
与根据用户输入执行 case 的其他语言不同,在 switcher 中,可用选项根据用户输入执行。
## 如何实现 Python Switch Case 语句?
对于使用 C、C++ 或 Java 等语言编写代码的程序员来说,Python 不支持 switch-case 语句看起来很奇怪。取而代之的是,Python 提供了许多解决方法,例如字典、Python lambda 函数或用于实现 switch-case 语句的 Python 类。
程序员应该检查PEP 3103,以便他们能够理解 Python 没有提供 switch case 语句的确切原因。
## 什么是 PEP 3103?
在 Python 中,PEP 代表 Python Enhancement Proposal,其中有很多可用。PEP 可以定义为包含 Python 新功能的文档。该文档还为社区记录了 Python 的各个方面,例如设计和样式。
PEP 3103,版本:$Revision$,是一个 switch/case 语句,它创建于 2006 年 6 月 25 日,发布于 2006 年 6 月 26 日。
这个 PEP 的存在是为了为语法和语义的不同方面的许多变体引入规范名称,例如
作为“替代 1”、“学校 II”、“选项 3”等等。
由于没有民众支持,该提议被否决。
在深入研究这些替代方案之前,最好先了解一下其他编程语言中 switch-case 语句的典型功能。
让我们看看下面提到的使用 C 编程语言制作的程序:
———————————————
```
switch (DayOfWeek){
case 1:
printf(“%s”, Monday);
break;
case 2:
printf(“%s”, Tuesday);
break;
case 3:
printf(“%s”, Wednesday);
break;
case 4:
printf(“%s”, Thursday);
break;
case 5:
printf(“%s”, Friday);
break;
case 6:
printf(“%s”, Saturday);
break;
case 7:
printf(“%s”, Sunday);
break;
default:
printf(“Incorrect Day”);
break;
}
```
———————————————
解释
在上述程序中,如果输入为“2”,则输出结果为“Tuesday”,如果输入为“6”,则输出结果为“Saturday”。当输入在 1 到 7 之外时,那么在这种情况下,输出结果将是“Incorrect Day”。
## 开关盒功能的替代方案
现在让我们转向 Python 中 switch case 函数的替代方案,并通过示例了解这些替代方案的功能。
1.使用字典映射
了解其他编程语言的程序员一定知道字典是如何工作的。为了在内存中存储一组对象,字典使用键值对。在 Python 中,当程序员使用字典作为 switch-case 语句的替代方案时,键值对的键作为 case 工作。
下面提到的示例演示了使用字典实现 switch case 语句。
在这个程序中,定义了一个函数month()来打印一个月中的哪一周。
让我们首先开始创建案例语句,然后为每个案例编写单独的函数。确保编写一个函数来处理默认情况。
———————————————
```
def monday():
return “Monday”
def tuesday():
return “Tuesday”
def wednesday():
return “Wednesday”
def thursday():
return “Thursday”
def friday():
return “Friday”
def saturday():
return “Saturday”
def sunday():
return “Sunday”
def default():
return “Incorrect Day”
```
———————————————
下一步是在 Python 中创建一个字典对象,并存储程序中已定义的所有函数。
———————————————
```
switcher = {
0: ‘monday’,
1: ‘tuesday’,
2: ‘wednesday’,
3: ‘thursday’,
4: ‘friday’,
5: ‘saturday’,
6: ‘sunday’,
}
```
———————————————
在最后一个动作中,将在程序中创建一个 switch 函数,它将接受一个整数作为输入,执行字典查找,并调用相应的函数。
———————————————
```
def day(DayOfWeek):
return
switcher.get(default)()
```
———————————————
完整的代码如下所示:
———————————————
```
def monday():
return “Monday”
def tuesday():
return “Tuesday”
def wednesday():
return “Wednesday”
def thursday():
return “Thursday”
def friday():
return “Friday”
def saturday():
return “Saturday”
def sunday():
return “Sunday”
def default():
return “Incorrect Day”
switcher = {
0: ‘monday’,
1: ‘tuesday’,
2: ‘wednesday’,
3: ‘thursday’,
4: ‘friday’,
5: ‘saturday’,
6: ‘sunday’,
}
def day(DayOfWeek):
return switcher.get(DayOfWeek, default)()
print(switch(1))
print(switch(0))
```
———————————————
上面的代码打印以下输出:
———————————————
周二
周一
———————————————
2.使用 Python 类
Python 类也是一种可用的替代方案,可用于在 Python 中实现 switch-case 语句。
可以将类定义为包含属性和方法的对象构造函数。
为了理解这个替代方案,让我们再次使用上面提到的示例。
在这个过程中,将在 Python 的 switch 类中定义一个 switch 方法。
另外,请查看有关Plotly Python的免费课程,并增强您对 Python 的了解。
例子
在第一个动作中,将在 Python switch 类中定义一个 switch 方法,该类将接受一个月中的一周作为参数,然后将其转换为字符串。
———————————————
```
class PythonSwitch:
def day(DayOfWeek):
default = “Incorrect Day”
return getattr(self, ‘case_’ + str(DayOfWeek), lambda: default)()
```
———————————————
注意:上面的例子中用到了两个东西:关键字 lambda 和 getattr() 方法。
Lambda 关键字用于在Python 中定义匿名函数。Lambda 关键字的作用是在用户输入无效输入时调用默认函数。
getattr()方法的作用是调用 Python 中的一个函数。现在让我们为每种情况创建单独的函数。
———————————————
```
def monday(self):
return “Monday”
def tuesday(self):
return “Tuesday”
def wednesday(self):
return “Wednesday”
def thursday(self):
return “Thursday”
def friday(self):
return “Friday”
def saturday(self):
return “Saturday”
def sunday(self):
return “Sunday”
```
———————————————
完整的代码如下所示:
———————————————
```
class PythonSwitch:
def day(self,DayOfWeek):
default = “Incorrect Day”
return getattr(self, ‘case_’ + str(DayOfWeek), lambda: default)()
def monday(self):
return “Monday”
def tuesday(self):
return “Tuesday”
def wednesday(self):
return “Wednesday”
def thursday(self):
return “Thursday”
def friday(self):
return “Friday”
def saturday(self):
return “Saturday”
def sunday(self):
return “Sunday”
my_switch = PythonSwitch()
print (my_switch.day(1))
print (my_switch.day(6))
```
———————————————
上面的代码打印以下输出
———————————————
周一
周六
———————————————
## switch 语句的限制
1.在switch没有规定的情况下,以及在使用float常量的情况下。
\2. 变量表达式不能用在case。
\3. 不允许在两种不同的情况下使用相同的常数。
4、关系表达式不能用在case中。
## 结论
本文教您什么是 switch-case 语句,可以使用哪些替代方案来代替 switch-case 语句,以及如何使用它们。
在这篇文章的过程中,我们了解到 Python 并没有提供内置的 switch case 语句,但是这些替代方案可以用来使代码更干净,并且可以获得更好的性能。
如上所述,Python 没有内置 switch case 函数的功能,但是为了使代码看起来整洁并获得更好的性能,您可以使用这些替代方法。
在本文中,我们尽最大努力提供有关 switch-case 语句的最佳知识。请随时在下面的评论中分享并提供您对本文的宝贵反馈。