【问题标题】:How to convert nested if/else function calls to a dictionary in python?如何将嵌套的 if/else 函数调用转换为 python 中的字典?
【发布时间】:2021-10-23 18:15:33
【问题描述】:

我有一个函数,它根据满足的条件语句调用不同的函数。该函数目前看起来像这样。

def func1(var_a, var_b=1):
    return 'Some values'

def func2(var_c, var_d=2):
    return  'Some values'

def func3(var_e, var_f):
    return 'Some values'


def choose_function(a, b, c):
    if a == 'first_option':
        val = func1(b, c)
    elif a == 'second_option':
        val = func2(b, c)
    elif a == 'third_option':
        val = func3(b, c)

    return val

函数choose_function以后可以有8-10多个if else条件。有没有更 Pythonic 的方式来处理这些条件语句。

我可以把它转换成一个字典,它根据字典中作为键提供的变量a 调用函数。更具体地说,我希望函数类似于以下内容

def choose_function(a, b, c):
    func_options ={
        'first_option': func1(b, c),
        'second_option': func2(b, c),
        'third_option': func3(b, c)
    }

    return func_options[a]

即使上述功能正常工作,每当有人提供字典键中不存在的值时,我该如何处理这种情况?

【问题讨论】:

    标签: python python-3.x python-3.6


    【解决方案1】:

    存储函数引用 - 定义字典时不要调用函数

    def choose_function(a, b, c):
        func_options ={
            'first_option': func1,
            'second_option': func2,
            'third_option': func3
        }
    
        return func_options[a](b,c)
    

    使用字典上的.get() 方法处理无效选项

        return func_options.get(a, lambda *args, **kwargs: ...)(b,c)
    

    用打印/默认值等替换...

    【讨论】:

      猜你喜欢
      • 2023-03-11
      • 2018-02-16
      • 2020-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 2019-09-12
      • 1970-01-01
      相关资源
      最近更新 更多