python - lambda*args,** kwargs: Ninguno
default-arguments (1)
De acuerdo con PEP8 , debe "Usar siempre una instrucción def en lugar de una instrucción de asignación que vincule una expresión lambda directamente a un nombre". Entonces, una cosa que cambiaría es:
def blank_fn(*args, **kwargs):
pass
Sin embargo, creo que una forma más pitónica de hacer esto es:
def perform_task(callback=None):
print ''doing stuff''
if callback is not None:
callback(''x'', ''y'', z=''z'')
No debería haber ninguna necesidad de llamar a una función que no hace nada. La prueba del valor de verdad es más barata que la función de llamada.
def do_nothing(*args, **kwargs): pass
def do_something(arg, callback=do_nothing):
a = 1 + 2
callback(''z'', z=''z'')
def do_something_else(arg, callback=None):
a = 1 + 2
if callback is not None:
callback(''z'', z=''z'')
%timeit do_something(3)
1000000 loops, best of 3: 644 ns per loop
%timeit do_something_else(3)
1000000 loops, best of 3: 292 ns per loop
considerar:
blank_fn = lambda *args, **kwargs: None
def callback(x, y, z=''''):
print x, y, z
def perform_task(callback=blank_fn):
print ''doing stuff''
callback(''x'', ''y'', z=''z'' )
La motivación para hacerlo de esta manera es que no tengo que poner en lógica para verificar si se ha asignado la devolución de llamada porque el valor predeterminado es blank_fn que simplemente no hace nada.
Esto funciona, pero ¿hay alguna razón por la que no debería hacerlo? ¿Es pitónico? Hay una mejor manera de hacerlo? ¿Hay una incorporada para:
lambda *args, **kwargs: None