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

你可能感兴趣的:(python,开发语言)