Je me retrouve parfois à vouloir faire des expressions lambda `` ne rien faire '', comme pour dire:
def do_nothing(*args):
pass
Mais la syntaxe suivante est illégale car les expressions lambda tentent de renvoyer tout ce qui se trouve après les deux points, et vous ne pouvez pas retourner pass
.
do_nothing = lambda *args: pass
Je me demandais donc si l'expression suivante serait un remplacement approprié pour ce qui précède?
do_nothing = lambda *args: None
Depuis le do_nothing
la fonction ci-dessus renvoie techniquement None
, est-il correct de créer une expression lambda qui renvoie None
à utiliser comme expression lambda d'espace réservé? Ou est-ce une mauvaise pratique?
Cette:
def do_nothing(*args):
pass
est équivalent à:
lambda *args: None
Avec quelques différences mineures, on est un lambda
et l'autre non. (Par exemple, __name__
Sera do_nothing
Sur la fonction et <lambda>
Sur le lambda.) N'oubliez pas **kwargs
, Si cela est important pour toi. Fonctions en Python sans un return <x>
Retour explicite None
. C'est ici :
Un appel renvoie toujours une valeur, éventuellement None, sauf s'il déclenche une exception.
J'ai utilisé des fonctions similaires comme valeurs par défaut, disons par exemple:
def long_running_code(progress_function=lambda percent_complete: None):
# Report progress via progress_function.
Si vous voulez vraiment une fonction complète de ne rien faire, assurez-vous de prendre *args
et*kwargs
.
noop = lambda *args, **kwargs: None
Dans toute son action glorieuse
>>> noop = lambda *args, **kwargs: None
>>> noop("yes", duck_size="horse", num_ducks=100)
>>>
Rendez-vous service pour l'avenir et incluez le **kwargs
manipulation. Si jamais vous essayez de l'utiliser quelque part au fond de votre code et que vous avez oublié qu'il ne fait pas prendre kwargs
, ce sera une exception à ne rien faire:
In [2]: do_nothing('asdf', duck="yes")
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-2-efbd722f297c> in <module>()
----> 1 do_nothing('asdf', duck="yes")
TypeError: <lambda>() got an unexpected keyword argument 'duck'
Parfois, les fonctions lambda sont utilisées pour la transformation des données, et dans ce cas, `` ne rien faire '' signifie renvoyer l'entrée, c'est-à-dire.
lambda x: x
Pour n'en renvoyer aucun, vous pouvez écrire
lambda x: None
C'est l'expression lambda la plus simple:
do_nothing = lambda: None
Aucun argument requis et le retour minimal requis.