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

  • Post category:Python

Python 中并没有原生支持 switch-case 语句的特性,但是我们可以用 Python 中内置的字典和函数来模拟 switch-case 的行为。

使用字典模拟 switch-case 语句需要以下几个步骤:

  1. 定义一个字典对象,key 为 case 值,value 为对应的处理函数。
  2. 定义一个函数根据不同的 key 值去调用对应的处理函数。
  3. 根据不同的情况将需要执行的值作为参数传递给函数。

下面是一个简单的示例代码:

def process_case_a(params):
    print("this is case a", params)

def process_case_b(params):
    print("this is case b", params)

def process_case_c(params):
    print("this is case c", params)

cases = {
    'a': process_case_a,
    'b': process_case_b,
    'c': process_case_c
}

def switch_case(case_key, params):
    func = cases.get(case_key, lambda x: print("Unknown case"))
    func(params)

switch_case('a', 'hello')
switch_case('b', 'world')

输出结果:

this is case a hello
this is case b world

在上面的代码中,我们首先定义了三个不同的处理函数 process_case_a、process_case_b、process_case_c,这些函数的具体实现可以根据具体需求进行修改。

接着,我们定义了一个 cases 字典对象,字典的 key 值为 case 值,value 为对应的处理函数。

最后,我们定义了一个函数 switch_case,该函数接收两个参数,一个是 case_key,表示需要执行的 case 值;另一个是 params,表示需要执行的具体参数。

在 switch_case 函数中,我们首先通过 get 方法获取到对应的处理函数,如果没有找到对应的处理函数,则返回一个默认的匿名函数,该函数输出字符串 “Unknown case”。

最后,我们通过调用获取到的处理函数来执行对应的 case 值。

另外一个示例,假设我们有一个需要根据不同分数等级计算学生的绩点的需求,我们可以使用字典和函数来实现:

def calc_grade_a(score):
    return 4.0

def calc_grade_b(score):
    return 3.0

def calc_grade_c(score):
    return 2.0

def calc_grade_d(score):
    return 1.0

def calc_grade_f(score):
    return 0.0

grades = {
    'A': calc_grade_a,
    'B': calc_grade_b,
    'C': calc_grade_c,
    'D': calc_grade_d,
    'F': calc_grade_f
}

def calc_gpa(grade, score):
    func = grades.get(grade, lambda x: print("Unknown grade"))
    gpa = func(score)
    print("GPA is", gpa)

calc_gpa('A', 90)
calc_gpa('B', 80)
calc_gpa('C', 70)
calc_gpa('X', 60)

输出结果:

GPA is 4.0
GPA is 3.0
GPA is 2.0
Unknown grade

在这个示例中,我们首先定义了 5 个不同的处理函数,分别用于计算不同分数等级的绩点。

接着,我们定义了一个 grades 字典对象,字典的 key 值为分数等级,value 为对应的处理函数。

最后,我们定义了一个 calc_gpa 函数来计算学生的绩点。在 calc_gpa 函数中,我们首先通过 get 方法获取到对应的处理函数,如果没有找到对应的处理函数,则返回一个默认的匿名函数,该函数输出字符串 “Unknown grade”。

最后,我们通过调用获取到的处理函数来计算对应分数等级的绩点。