详解Python 用字典模拟switch-case语句

  • Post category:Python

Python是一门灵活多变,语法简单易学的高级编程语言。虽然Python中没有原生支持switch-case语句,但可以通过使用字典模拟这个功能。

什么是 switch-case语句?

switch-case语句是一种流程控制语句,用于从多个分支中选择一个分支执行。它的基本结构由一个“开关值”和多个“分支值”组成,根据开关值的取值来选择相应的分支值。

在Python中,没有原生支持switch-case语句,但可以通过使用字典模拟这个功能。

如何使用字典模拟 switch-case 语句?

通过使用字典模拟 switch-case 语句,实现的代码结构简单,易于维护和扩展。下面通过示例代码详细讲解字典模拟 switch-case 语句的使用方法。

例一:数字转换为月份

以下代码演示了如何使用字典模拟 switch-case 语句的功能,将一个数字转换为相应的英文月份。

def month_name(num):
    """
    将数字转换为月份
    """
    return {
        1: 'January',
        2: 'February',
        3: 'March',
        4: 'April',
        5: 'May',
        6: 'June',
        7: 'July',
        8: 'August',
        9: 'September',
        10: 'October',
        11: 'November',
        12: 'December'
    }.get(num, 'Invalid month')

print(month_name(6))    # June
print(month_name(13))   # Invalid month

在以上代码中,使用了字典的get()方法来返回相应的月份名称,如果输入值不在字典中,则返回“Invalid month”字符串。

例二:计算加减乘除

以下代码演示了在计算加减乘除时,如何使用字典模拟 switch-case 语句的功能。

def add(num1, num2):
    """
    计算加法
    """
    return num1 + num2

def sub(num1, num2):
    """
    计算减法
    """
    return num1 - num2

def mul(num1, num2):
    """
    计算乘法
    """
    return num1 * num2

def div(num1, num2):
    """
    计算除法
    """
    if num2 == 0:
        raise ValueError("Cannot divide by zero!")
    return num1 / num2

def calculate(operation, num1, num2):
    """
    计算加减乘除
    """
    return {
        '+': add,
        '-': sub,
        '*': mul,
        '/': div
    }.get(operation, lambda x, y: None)(num1, num2)

print(calculate('+', 5, 3))   # 8
print(calculate('-', 5, 3))   # 2
print(calculate('*', 5, 3))   # 15
print(calculate('/', 5, 3))   # 1.6666666666666667
print(calculate('$', 5, 3))   # None

在以上代码中,使用了字典的get()方法来返回相应的操作函数。可以看到,在字典中,加号、减号、乘号和除号分别与相应的操作函数进行了关联。如果输入的操作符不在字典中,那么会执行一个默认的lambda函数,它会返回None。

总结

通过字典模拟 switch-case 语句,我们可以轻松实现多个分支的选择语句。相比于大量使用if-else条件判断语句,使用字典模拟 switch-case 语句具有更清晰的代码结构和更高的代码可读性。