写在前面
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