如何在 Python 中实现 Switch Case 函数? [2022]
已发表: 2021-01-08目录
介绍
你有没有想过是否有替代方法来用 Python 编写那些复杂的 If-else 语句? 如果您不希望多个“If”语句使代码混乱,则应考虑使用 Switch case 语句,该语句提供了一种更简洁、更快捷的方式来在代码中实现控制流。 与 C++、Java、Ruby 和其他编程语言不同,Python 不提供 switch case 语句,但它提供了一些解决方法来使该语句工作。
例如,Python 允许您创建代码片段,其工作方式类似于其他编程语言中的Python Switch case语句。 您将在本博客后面部分了解更多关于实现 switch-case 语句的方法。 如果您有兴趣了解有关 python 的更多信息,请查看我们的数据科学课程。
什么是 Python 中的 Switch 语句?
一般来说,switch 是一种控制机制,它测试存储在变量中的值并执行相应的 case 语句。 Switch case 语句在您的程序中引入控制流,并确保您的代码不会被多个“if”语句弄乱。
因此,您的代码对查看者来说看起来细致而透明。 这是程序员用来在其代码中实现控制流的绝妙编程特性。 Switch case 语句通过将 case 语句中指定的值与代码中的变量进行比较来工作。
如何实现 Python Switch Case 语句
如果您一直使用 C++ 或 Java 等语言进行编码,您可能会觉得 Python 没有 switch case 语句很奇怪。 相反,Python 提供了许多解决方法,例如字典、Python 类或 Python lambda 函数来实现 switch-case 语句。
如果您想知道在 python 中没有 switch case 语句的确切原因,那么您应该检查PEP 3103 。
在深入研究这些替代方案之前,让我们先看看 switch case 函数在其他编程语言中通常是如何工作的。
在下面的示例中,我们使用了 C 编程语言
开关(年月){ 情况1: printf(“%s”, 一月); 休息; 案例2: printf(“%s”, 二月); 休息; 案例3: printf(“%s”, 三月); 休息; 案例4: printf(“%s”, 四月); 休息; 案例5: printf(“%s”, 五月); 休息; 案例6: printf(“%s”, 六月); 休息; 案例7: printf(“%s”, 七月); 休息; 案例8: printf(“%s”, 八月); 休息; 案例9: printf(“%s”, 九月); 休息; 案例 10: printf(“%s”, 十月); 休息; 案例 11: printf(“%s”, 十一月); 休息; 案例 12: printf(“%s”, 十二月); 休息; 默认: printf(“月份不正确”); 休息; } |
现在,让我们更深入地了解Python switch case函数的替代方案,并借助示例了解这些替代方案是如何工作的。
阅读: Python 中的职业机会:您需要知道的一切
使用字典映射
如果您熟悉其他编程语言,那么您一定知道字典使用键值对将一组对象存储在内存中。 当您使用字典作为 switch-case 语句的替代方案时,键值对的键作为 case 工作。
以下示例显示了使用字典的 switch case 语句的实现。 在这里,我们定义了一个函数 month() 来打印一年中的哪个月。
首先,首先创建案例语句并为每个案例编写单独的函数。 确保您编写了一个处理默认情况的函数。
定义一月(): 返回“一月” 定义二月(): 返回“二月” 定义游行(): 返回“三月” 定义四月(): 返回“四月” 定义可能(): 返回“可能” 定义六月(): 返回“六月” 定义七月(): 返回“七月” 默认八月(): 返回“八月” 定义九月(): 返回“九月” 十月(): 返回“十月” 定义十一月(): 返回“十一月” 定义十二月(): 返回“十二月” 默认值(): 返回“错误的月份” |
接下来,在 Python 中创建一个字典对象并存储您在程序中定义的所有函数。
切换器 = { 0: '一月', 1:“二月”, 2:“三月”, 3:“四月”, 4:“可能”, 5:“六月”, 6:“七月”, 7:“八月”, 8:“九月” 9:“十月”, 10:“十一月”, 11:“十二月” } |
最后,在你的程序中创建一个 switch 函数,它应该接受整数作为输入,执行字典查找,并调用相应的函数。
def 月(年月): return switcher.get(monthOfYear, default)() |
完整的代码将如下所示
定义一月(): 返回“一月” 定义二月(): 返回“二月” 定义游行(): 返回“三月” 定义四月(): 返回“四月” ![]() 定义可能(): 返回“可能” 定义六月(): 返回“六月” 定义七月(): 返回“七月” 默认八月(): 返回“八月” 定义九月(): 返回“九月” 十月(): 返回“十月” 定义十一月(): 返回“十一月” 定义十二月(): 返回“十二月” 默认值(): 返回“错误的月份”
切换器 = { 0: '一月', 1:“二月”, 2:“三月”, 3:“四月”, 4:“可能”, 5:“六月”, 6:“七月”, 7:“八月”, 8:“九月” 9:“十月”, 10:“十一月”, 11:“十二月” } def 月(年月): return switcher.get(monthOfYear, default)() 打印(开关(1)) 打印(开关(0)) |
上面的代码打印以下输出
二月 一月 |
另请阅读: 42 个令人兴奋的 Python 项目创意和适合初学者的主题
使用 Python 类
您还可以使用 Python 类作为实现 switch-case 语句的替代方法。 类是具有属性和方法的对象构造函数。 让我们借助上述相同的示例进一步理解这一点。 在这里,我们将在 Python switch 类中定义一个 switch 方法。
例子
首先,我们将在 Python switch 类中定义一个 switch 方法,该方法将一年中的一个月作为参数,将结果转换为字符串。
类 PythonSwitch: def 月(自我,年月): 默认=“错误的月份” return getattr(self, 'case_' + str(monthOf Year), lambda: default)() |
注意:在上面的例子中,我们使用了两个东西:关键字 lambda 和 getattr() 方法。
- 我们使用 lambda 关键字在 Python 中定义匿名函数。 当用户输入无效输入时,Lambda 关键字调用默认函数。
- getattr() 方法用于调用 Python 中的函数。
现在,为每种情况创建单独的函数。
定义一月(自己): 返回“一月”
def 2 月(自己): 返回“二月” def 游行(自我): 返回“三月”
定义四月(自我): 返回“四月”
def 可能(自己): 返回“五月”
定义六月(自我): 返回“六月” 七月(自我): 返回“七月”
默认八月(自我): 返回“八月”
def 九月(自我): 返回“九月” def 十月(自我): 返回“十月”
def 十一月(自己): 返回“十一月”
def 十二月(自我): 返回“十二月” |
完整的代码将如下所示
类 PythonSwitch: def 月(自我,年月): 默认=“错误的月份” return getattr(self, 'case_' + str(monthOf Year), lambda: default)() 定义一月(自己): 返回“一月”
def 2 月(自己): 返回“二月”
def 游行(自我): 返回“三月”
定义四月(自我): 返回“四月”
def 可能(自己): 返回“五月”
定义六月(自我): 返回“六月” 七月(自我): 返回“七月”
默认八月(自我): 返回“八月”
def 九月(自我): 返回“九月” def 十月(自我): 返回“十月”
def 十一月(自己): 返回“十一月”
def 十二月(自我): 返回“十二月” my_switch = PythonSwitch() 打印 (my_switch.month(1)) 打印(my_switch.month(10)) |
上面的代码打印以下输出
一月 十月 |
查看:印度的 Python 开发人员薪水
结论
在本博客中,您了解了 switch-case 语句、switch-case 语句的替代方案以及如何使用它们。 如上所述,Python 没有内置的 switch case 函数,但是您始终可以使用这些替代方法来使您的代码看起来整洁并获得更好的性能。
如果您想了解数据科学,请查看 IIIT-B 和 upGrad 的数据科学执行 PG 计划,该计划是为在职专业人士创建的,提供 10 多个案例研究和项目、实用的实践研讨会、行业专家的指导、1与行业导师一对一,400 多个小时的学习和顶级公司的工作协助。
区分普通字典和 Python 字典。
Python 字典或“Dict”是 Python 的内置数据结构,用于存储无序的元素集合。 与其他存储单个值的 Python 数据结构不同,字典数据结构存储键值对,其中每个键都是唯一的。 它不记得键值对的插入顺序并遍历键。 另一方面,Ordered Dictionary 或 OrderedDict 会跟踪键值对的插入顺序。 由于它的双向链表实现,它还比 Python 中的常规字典消耗更多的内存。 如果您删除并重新插入相同的键,它将被插入到原来的位置,因为 OrderedDict 会记住插入顺序。
namedtuple 的哪些操作使其成为用于 switch 案例的便捷选项?
Python 中的 namedtuple 执行各种操作。 以下是 namedtuple 执行的一些最常见操作的列表。 与字典不同,命名元组中的元素可以通过它们的索引来访问。 访问元素的另一种方法是通过它们的键名。 make() 函数返回一个命名元组。 _asadict() 函数返回从映射值构造的有序字典。 _replace() 函数将键名作为其参数并更改映射到它的值。 _fileds() 函数返回给定命名元组的所有键名。
我们什么时候更喜欢使用列表来存储数据?
Python列表被认为是在以下场景中存储数据的最佳数据结构 - 列表可用于存储具有不同数据类型的各种值,并且可以仅通过它们各自的索引来访问。 当您需要对元素执行数学运算时,可以使用列表,因为它允许您直接对元素进行数学运算。 由于列表可以调整大小,因此当您不确定要存储的元素数量时,可以使用它来存储数据。 列表元素很容易可变,并且它还可以存储重复元素,这与集合和字典不同。