Python 优雅的实现Switch操作:告别嵌套的 If-Else 语句

写在前面

Python 是一种功能强大的编程语言,开发人员可以使用它编写简洁且可读的代码。然而,与其他一些编程语言不同,Python 没有内置的 switch 语句。

而 switch 语句是一种控制结构,允许开发人员根据变量的值执行不同的代码块。

在本文中,我们将探索在 Python 中实现类似 switch 功能的几种方法。

方法一:使用if-elif-else语句

在 Python 中实现类似 switch 功能的最常见方法之一是使用 if-elif-else 语句。

此方法涉及使用一系列 if 语句检查变量的值,并根据结果执行适当的代码块。

这是一个例子:

def calculate_grade(score):
    if score >= 90:
        print("Grade: A")
    elif score >= 80:
        print("Grade: B")
    elif score >= 70:
        print("Grade: C")
    elif score >= 60:
        print("Grade: D")
    else:
        print("Grade: F")

calculate_grade(85)  # Output: Grade: B
calculate_grade(72)  # Output: Grade: C
calculate_grade(95)  # Output: Grade: A
calculate_grade(45)  # Output: Grade: F

在这个例子中,calculate_grade 函数接受一个分数参数并使用一系列 if-elif 语句检查其值。如果参数与其中一种情况匹配,则执行相应的代码块。

方法二:使用字典

在 Python 中可以泗洪字典来模拟实现 switch 功能。此方法需要创建一个字典,然后将变量的值映射到函数或代码块。

以下是使用字典来查找餐厅菜单项的示例:

def show_menu():
    print("Menu:")
    print("1. Pizza")
    print("2. Pasta")
    print("3. Salad")
    print("4. Burger")
    print("5. Sandwich")

def order_pizza():
    print("You ordered a pizza.")

def order_pasta():
    print("You ordered pasta.")

def order_salad():
    print("You ordered a salad.")

def order_burger():
    print("You ordered a burger.")

def order_sandwich():
    print("You ordered a sandwich.")

switch = {
    1: order_pizza,
    2: order_pasta,
    3: order_salad,
    4: order_burger,
    5: order_sandwich,
}

def take_order():
    show_menu()
    choice = int(input("Enter your choice (1-5): "))
    func = switch.get(choice)
    if func:
        func()
    else:
        print("Invalid choice.")

take_order()

# Sample Output:
# Menu:
# 1. Pizza
# 2. Pasta
# 3. Salad
# 4. Burger
# 5. Sandwich
# Enter your choice (1-5): 2
# You ordered pasta.

在此示例中,switch 字典将参数变量的值映射到函数。具体为使用字典的  get 方法根据参数的值检索适当的函数。如果在字典中找不到参数,则执行默认情况。

方法 3:使用基于类的方法

我们还可以使用基于类的方法来模拟实现 switch 功能。这个方法需要创建一个能够表示选择句的类并为每种情况定义方法。

下面是一个示例,说明如何使用基于类的方法来实现上一节提到的菜单订购系统:

class RestaurantMenu:
    def __init__(self):
        self.menu = {
            1: self.order_pizza,
            2: self.order_pasta,
            3: self.order_salad,
            4: self.order_burger,
            5: self.order_sandwich,
        }

    def show_menu(self):
        print("Menu:")
        print("1. Pizza")
        print("2. Pasta")
        print("3. Salad")
        print("4. Burger")
        print("5. Sandwich")

    def order_pizza(self):
        print("You ordered a pizza.")

    def order_pasta(self):
        print("You ordered pasta.")

    def order_salad(self):
        print("You ordered a salad.")

    def order_burger(self):
        print("You ordered a burger.")

    def order_sandwich(self):
        print("You ordered a sandwich.")

    def take_order(self):
        self.show_menu()
        choice = int(input("Enter your choice (1-5): "))
        func = self.menu.get(choice)
        if func:
            func()
        else:
            print("Invalid choice.")

restaurant = RestaurantMenu()
restaurant.take_order()

# Sample Output:
# Menu:
# 1. Pizza
# 2. Pasta
# 3. Salad
# 4. Burger
# 5. Sandwich
# Enter your choice (1-5): 3
# You ordered a salad.

方法 4:使用基于函数的方法

你还可以使用基于函数的方法,这个方法需要为每种情况定义个函数并将它们存储在字典中。以下是代码示例:

def  show_menu (): 
    print ( "菜单:" ) 
    print ( "1.披萨" ) 
    print ( "2.意大利面" ) 
    print ( "3.沙拉" ) 
    print ( "4.汉堡" ) 
    print ( "5.三明治" ) 

def  order_pizza (): 
    print ( "您点了披萨。" ) 

def  order_pasta (): 
    print ( "您点了意大利面。" ) 

def  order_salad (): 
    print ( "您点了沙拉。" ) 

def  order_burger () : 
    print ( "您点了一个汉堡。" ) 

def  order_sandwich (): 
    print ( "您点了一个三明治。" ) 

def  take_order (): 
    show_menu() 
    choice = int ( input ( "输入您的选择 (1-5): " )) 
    if choice == 1 : 
        order_pizza() 
    elif choice == 2 : 
        order_pasta() 
    elif choice == 3 : 
        order_salad() 
    elif choice == 4 : 
        order_burger() 
    elif choice == 5 : 
        order_sandwich() 
    else : 
        print ( "Invalid choice." ) 

take_order() 

# 输出示例:
# 菜单:
# 1. Pizza 
# 2. Pasta 
# 3. Salad 
# 4. Burger 
# 5. Sandwich 
# Enter your choice (1-5): 4 
#你点了一个汉堡。

看起来这个好像是基于if-elif-else和字典的混合方法,然而,内在的思想还是有差异的。并且与字典或基于类的方法相比,此方法的可扩展性较差且更难维护,特别是在菜单项和订单函数的数量增加的情况下。所以在实际项目中应尽量避免编写此类代码。

方法5:使用Python 3.10中的match语句

从 Python 3.10 开始,引入了一个称为 match 语句的新特性,它提供了一种更优雅的方式来实现类似 switch 的功能。以下是代码示例:


def take_order(choice):
    match choice:
        case 1:
            print("You ordered a pizza.")
        case 2:
            print("You ordered pasta.")
        case 3:
            print("You ordered a salad.")
        case 4:
            print("You ordered a burger.")
        case 5:
            print("You ordered a sandwich.")
        case _:
            print("Invalid choice.")

take_order(4)

# Sample Output:
# You ordered a burger.

在这个代码示例中,我们定义了一个 take_order 函数,该函数包含一个代表用户选择的参数 choice。你可能注意到他和 C 语言或者 Java 中的 switch 语句用法特别相似,只是默认的分支使用_表示

请注意,此方法仅适用于 Python 3.10+,你可能需要升级自己 Python。

写在随后

在本文中,我们探索了使用 if-elif-else 语句、字典、基于类的方法、基于函数的方法以及 Python 3.10 中新的 match 语句在 Python 中实现类似 switch 功能的各种方法。

每种方法都有其优点和缺点,最佳方法将取决于具体的用例,开发者需要在实际的项目中进行选择。


原文始发于微信公众号(harvey的网络日志):Python 优雅的实现Switch操作:告别嵌套的 If-Else 语句

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/195849.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!