据我所知,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()需要采用(可选)参数吗?
答案 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