Caja de conmutador Python que permite argumentos opcionales.

Entiendo que no hay casos de cambio en Python y que se puede usar un diccionario en su lugar. Pero, ¿qué sucede si deseo pasar argumentos a la función cero () pero no a uno ()? No encontré ninguna pregunta relacionada con esto.

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() 

¿Cuál es la forma más sencilla de implementar esto sin tener que separarlos en dos casos? Creo que func () tendría que tomar los argumentos (opcionales)?

Related of "Caja de conmutador Python que permite argumentos opcionales."

Podrías usar parcial

 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() 

Supongo que te refieres a un argumento fijo para las funciones que estás llamando. Si ese es el caso, simplemente ajuste las funciones en otra función que lo llame con el argumento relevante:

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

Puede usar el mismo método para pasar un argumento opcional a través de la llamada a 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", } 

Si entendí el caso correctamente, aquí hay una alternativa para hacerlo sin importar nada y también sin lambda. Simplemente puede navegar a los métodos necesarios que ya tiene fuera del conmutador:

 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)) 

imprimir (caja de distribución (“a”) (10))

11.0

imprimir (caja de distribución (“b”) (10, 3))

66.0

imprimir (switchcase (“ddd”) (10))

10