• 如何实现 Python Switch Case 语句?



    在开发软件时使用过 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 中那些复杂的 if-else 语句的代码编写方式,那会是怎样的呢?如果程序员希望避免使用 if-else 语句使代码混乱,那么他们应该考虑在编码中使用 switch case 语句。上面已经提到了使用 switch case 语句的优点。

    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 语句的最佳知识。请随时在下面的评论中分享并提供您对本文的宝贵反馈。

  • 相关阅读:
    hive anti join 的几种写法
    Java版分布式微服务云开发架构 Spring Cloud+Spring Boot+Mybatis 电子招标采购系统功能清单
    前端用 js-file-download组件下载后端返回的pdf,word,excel文件
    安装 Dispatch 库
    cat_face_detection(AI开发框架esp-who)
    JS逆向实战20——某头条jsvm逆向
    U-Boot初始化及工作流程分析
    任职超18年,Go团队技术主管Russ Cox官宣卸任!
    海康摄像头配置QQ邮箱
    战备器材管理系统-部队物资仓库管理系统
  • 原文地址:https://blog.csdn.net/weixin_47967031/article/details/126989561