Python switch case允许可选参数

时间:2016-04-15 13:43:38

标签: python

据我所知,python中没有switch case,可以使用字典代替。但是,如果我想传递参数函数zero()但没有参数one()怎么办?我没有发现任何与此有关的问题。

def zero(number):
    return number == "zero"

def one():
    return "one"

def numbers_to_functions_to_strings(argument):
    switcher = {
        0: zero,
        1: one,
        2: lambda: "two",
    }
    # Get the function from switcher dictionary
    func = switcher.get(argument, lambda: "nothing")
    # Execute the function
    return func()

实现这一点的最简单方法是什么,而不必将它们分成两种情况?我认为func()需要采用(可选)参数吗?

3 个答案:

答案 0 :(得分:1)

您可以使用partial

from functools import partial

def zero(number):
    return number == "zero"

def one():
    return "one"

def numbers_to_functions_to_strings(argument):
    switcher = {
        0: partial(zero, argument),
        1: one,
        2: lambda: "two",
    }

    func = switcher.get(argument, lambda: "nothing")
    return func()

答案 1 :(得分:1)

我假设你的意思是你要调用的函数的固定参数。如果是这种情况,只需将函数包装在另一个使用相关参数调用它的函数中:

switcher = {
    0: lambda: zero("not zero"),
    1: one,
    2: lambda: "two",
}

您可以使用相同的方法从numbers_to_functions_to_strings调用中传递可选的文件:

def numbers_to_functions_to_strings(argument, opt_arg="placeholder"):
    switcher = {
        0: lambda: zero(opt_arg),
        1: one,
        2: lambda: "two",
    }

答案 2 :(得分:1)

如果我正确地理解了这个案例,这里可以选择不做任何东西而且没有lambda。您可以导航到切换台外已有的必要方法:

def fa(num):
    return num * 1.1
def fb(num, option=1):
    return num * 2.2 * option
def f_default(num):
    return num

def switch(case):
    return {
        "a":fa,
        "b":fb,
    }.get(case, f_default)  # you can pass

print switch("a")(10)  # for Python 3 --> print(switchcase("a")(10))
print switch("b")(10, 3)  # for Python 3 --> print(switchcase("b")(10, 3))
  

打印(switchcase("&#34)(10))

     

11.0

     

打印(switchcase(" b")(10,3))

     

66.0

     

打印(switchcase(" DDD&#34)(10))

     

10