Ein passender 'do nothing' Lambda-Ausdruck in Python?
Finde ich manchmal mich selbst machen zu wollen Platzhalter 'nichts tun' lambda-Ausdrücke, ähnlich wie zu sagen:
def do_nothing(*args):
pass
Aber die folgende syntax ist illegal, da lambda-Ausdrücke zu versuchen, um wieder, was nach dem Doppelpunkt, und Sie können nicht zurück pass
.
do_nothing = lambda *args: pass
Also habe ich mich gefragt, würden Sie den folgenden Ausdruck ein geeigneter Ersatz für die oben genannten?
do_nothing = lambda *args: None
Da die do_nothing
obige Funktion technisch gibt None
, ist es okay, machen Sie einen lambda-Ausdruck zurückgibt None
zu verwenden, als Platzhalter lambda-Ausdruck? Oder ist es schlechte Praxis?
Kommentar zu dem Problem
Es macht das gleiche wie
do_nothing
Funktion, aber es ist nicht klar, warum Sie benötigen, um ein lambda
. Ich wollte verwenden Sie
lambda
rein für die Lesbarkeit von code, da bin ich persönlich kein fan von geschachtelten Funktionen und die Anwendung, die ich nutzen wollte den Ausdruck in wäre eine Dritte verschachtelte Funktion. Ich bin auch einfach nur interessiert an anderen Meinungen über die Verwendung dieser Codierung trope. In idiomatic Python, die meisten Orte, wo würden Sie brauchen einen do-nothing-Funktion accept
None
, auch wenn es immer noch nicht aufrufbar. Zu Witz: filter(None, alist)
Da alle do-nothing-Funktionen das gleiche tun nichts, Sie konnte einfach definieren
do_nothing
in einem Ort und dann übergeben Sie do_nothing
, wenn Sie wollen, eine tun-nichts. Es gibt keine Notwendigkeit, neu zu definieren, es mit einer neuen lambda (oder full-function-def) jedes mal, wenn Sie es verwenden möchten. verspotten.Mock()
können Sie Ihre dummy aufrufbar, akzeptieren keine Parameter. Aber es gibt andere Verspotten und es kann dazu führen seltsame Fehler. Ändern Sie es auf verspotten.Mock(return_value=None)
kann immer noch buggy, da kann man versuchen, ein Attribut aus, und es wird funktionieren, Rückkehr eine weitere Mock. InformationsquelleAutor der Frage user3002473 | 2014-03-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
:
ist äquivalent zu:
Mit einige kleinere Unterschiede, dass man ein
lambda
und nicht. (Zum Beispiel__name__
wirddo_nothing
auf die Funktion, und<lambda>
auf die lambda.) Vergessen Sie nicht über**kwargs
, wenn es Ihnen wichtig ist. Funktionen in Python, die ohne eine explizitereturn <x>
zurückNone
. Dies ist hier:Habe ich verwendet, die ähnliche Funktionen wie die Standard-Werte, sagen wir zum Beispiel:
InformationsquelleAutor der Antwort Thanatos
Wenn Sie wirklich wollen, eine full-nichts-Funktion, stellen Sie sicher, nehmen
*args
und*kwargs
.In all seiner glorreichen Aktion
Seite Hinweis
Tun Sie sich selbst einen gefallen für die Zukunft und umfassen die
**kwargs
Handhabung. Wenn Sie jemals versuchen, Sie irgendwo tief Weg in Ihren code ein und Sie vergessen, dass es nicht nehmenkwargs
ziemlich die Ausnahme, nichts zu tun:InformationsquelleAutor der Antwort Kyle Kelley
Manchmal lambda wird verwendet für Daten-transformation, dann nichts zu tun in der Regel bedeutet die Rückkehr der input, d.h.
lambda x: x
Zurück keine, die man schreiben kann
lambda x: None
InformationsquelleAutor der Antwort Paul
Dies ist die einfachste lambda-Ausdruck:
Keine Argumente erforderlich, und die minimal erforderliche Rendite.
InformationsquelleAutor der Antwort Rafa0809