Ich versuche Python Lambdas herauszufinden. Ist Lambda eines dieser "interessanten" Sprachelemente, die im wirklichen Leben vergessen werden sollten?
Ich bin mir sicher, dass es einige Randfälle gibt, in denen dies erforderlich sein könnte, aber angesichts der Unklarheit, des Potenzials einer Neudefinition in zukünftigen Versionen (meine Annahme basiert auf den verschiedenen Definitionen) und der verringerten Klarheit der Codierung - sollte dies der Fall sein Gemieden werden?
Dies erinnert mich an ein Überlaufen (Pufferüberlauf) von C-Typen - Zeigen auf die oberste Variable und Überladen, um die anderen Feldwerte festzulegen. Es fühlt sich an wie eine Art Technikfreak, aber ein Alptraum für Wartungscodierer.
Antworten:
Sprechen Sie über Lambda-Funktionen ? Mögen
Diese Dinge sind eigentlich sehr nützlich. Python unterstützt einen Programmierstil namens funktionale Programmierung, bei dem Sie Funktionen an andere Funktionen übergeben können, um Aufgaben zu erledigen. Beispiel:
setzt
mult3
auf[3, 6, 9]
die Elemente der ursprünglichen Liste, die ein Vielfaches von 3 sind. Dies ist kürzer (und, wie man argumentieren könnte, klarer) alsIn diesem speziellen Fall können Sie natürlich dasselbe tun wie ein Listenverständnis:
(oder sogar als
range(3,10,3)
), aber es gibt viele andere, komplexere Anwendungsfälle, in denen Sie kein Listenverständnis verwenden können und eine Lambda-Funktion möglicherweise der kürzeste Weg ist, etwas aufzuschreiben.Rückgabe einer Funktion von einer anderen Funktion
Dies wird häufig verwendet, um Funktionsumbrüche wie Pythons Dekoratoren zu erstellen.
Kombinieren von Elementen einer iterierbaren Sequenz mit
reduce()
Sortieren nach einem alternativen Schlüssel
Ich benutze regelmäßig Lambda-Funktionen. Es dauerte eine Weile, bis ich mich an sie gewöhnt hatte, aber irgendwann wurde mir klar, dass sie ein sehr wertvoller Teil der Sprache sind.
quelle
','.join(str(x) for x in [1,2,3,4,5,6,7,8,9])
lambda
Funktionen anonym sein können (wie in all Ihren Beispielen). Wenn Sielambda
irgendetwas eine Funktion zuweisen , dann machen Sie es falsch und solltendef
stattdessen verwendenlambda
ist nur eine ausgefallene Art zu sagenfunction
. Abgesehen von seinem Namen ist nichts Unbekanntes, Einschüchterndes oder Kryptisches daran. Wenn Sie die folgende Zeile zu lesen, ersetzenlambda
durchfunction
im Kopf:Es definiert nur eine Funktion von
x
. Einige andere SprachenR
sagen es ausdrücklich:Siehst du? Es ist eines der natürlichsten Dinge beim Programmieren.
quelle
lambda
sehr einfach zu verstehen ist. Vielen Dank!lambda
durchfunction
in Ihrem Kopf und fügen Siereturn
vor dem letzten Ausdruck hinzutype(lambda x: 3)
.lambda
Ausdrücke unddef
Anweisungen erzeugen beidefunction
Objekte; Nur die Syntax eineslambda
Ausdrucks begrenzt, welche Instanzen er erzeugen kann.lambda
Ausdruck definieren können, heißt das nicht, dass das Ergebnis eineslambda
Ausdrucks keine Funktion ist.Die zweizeilige Zusammenfassung:
lambda
Schlüsselwort: unnötig, gelegentlich nützlich. Wenn Sie feststellen, dass Sie etwas entfernt Komplexes damit tun, legen Sie es weg und definieren Sie eine echte Funktion.quelle
Ein Lambda ist Teil eines sehr wichtigen Abstraktionsmechanismus, der sich mit Funktionen höherer Ordnung befasst. Um den Wert richtig zu verstehen, schauen Sie sich bitte hochwertige Lektionen von Abelson und Sussman an und lesen Sie das Buch SICP
Dies sind relevante Themen im modernen Softwaregeschäft, die immer beliebter werden.
quelle
lambda
s und erstklassige Funktionen. Python hat eine extrem eingeschränktelambda
Aussage, aber völlig erstklassige Funktionen. Der einzige Unterschied besteht darin, dass Sie die Funktionen benennen müssen, die Sie weitergeben möchten.Lambdas sind äußerst nützlich bei der GUI-Programmierung. Angenommen, Sie erstellen eine Gruppe von Schaltflächen und möchten einen einzelnen parametrisierten Rückruf anstelle eines eindeutigen Rückrufs pro Schaltfläche verwenden. Mit Lambda können Sie dies mühelos erreichen:
(Hinweis: Obwohl diese Frage speziell gestellt wird
lambda
, können Sie auch functools.partial verwenden , um den gleichen Ergebnistyp zu erhalten.)Die Alternative besteht darin, für jede Schaltfläche einen separaten Rückruf zu erstellen, der zu doppeltem Code führen kann.
quelle
value
eine Schleife definiert ist. im anderen Beispiel hatte der Parameter immer nur einen Wert. Wenn Sie so etwas wie hinzufügen, fügenarg=value
Sie dem Rückruf den aktuellen Wert hinzu. Ohne sie binden Sie einen Verweis auf die Variable im Rückruf. Die Referenz enthält immer den Endwert der Variablen, da der Rückruf einige Zeit nach Beendigung der Schleife erfolgt.functools.partial()
Sie, dass Sie dies mit weniger Cruft (und ohnelambda
) tun können .partial(my_callback, value)
vslambda arg=value: my_callback(arg)
- das Lambda hat viel mehr Cruft (Zuordnung zu Arg und dann Verwendung) und es ist weniger klar, was die Absicht ist (Sie könnten etwas subtil anderes im Lambda tun). Importe sind eigentlich kein Problem (Sie haben sowieso einen Stapel und es ist einmal pro Datei). Code lässt sich am besten daran messen, wie gut er liest, undpartial()
ist viel einfacher zu lesen als das Lambda.Ich bezweifle, dass Lambda verschwinden wird. Siehe Guidos Beitrag über das endgültige Aufgeben des Versuchs, ihn zu entfernen. Sehen Sie sich auch einen Überblick über den Konflikt an .
In diesem Beitrag erfahren Sie mehr über die Funktionsweise von Python: http://python-history.blogspot.com/2009/04/origins-of-pythons-functional-features.html
Meine eigenen zwei Cent: Selten ist Lambda es wert, was die Klarheit betrifft. Im Allgemeinen gibt es eine klarere Lösung, die kein Lambda enthält.
quelle
In Python
lambda
ist dies nur eine Möglichkeit, Funktionen inline zu definieren.und..
..sind das genaue gleiche.
Mit Lambda können Sie nichts tun, was Sie mit einer regulären Funktion nicht tun können. In Python sind Funktionen ein Objekt wie alles andere, und Lambdas definieren einfach eine Funktion:
Ich denke ehrlich das
lambda
Schlüsselwort in Python überflüssig ist - ich hatte nie die Notwendigkeit, sie zu verwenden (oder habe eine gesehen, bei der eine reguläre Funktion, ein Listenverständnis oder eine der vielen integrierten Funktionen besser hätte verwendet werden können).Für ein völlig zufälliges Beispiel aus dem Artikel "Pythons Lambda ist kaputt!" ::
Ich würde argumentieren, auch wenn das funktioniert hat, es ist schrecklich und "unpythonisch", die gleiche Funktionalität könnte auf unzählige andere Arten geschrieben werden, zum Beispiel:
Ja, es ist nicht dasselbe, aber ich habe noch nie eine Ursache gesehen, bei der das Generieren einer Gruppe von Lambda-Funktionen in einer Liste erforderlich war. In anderen Sprachen mag es sinnvoll sein, aber Python ist nicht Haskell (oder Lisp oder ...)
Bearbeiten:
Es gibt einige Fälle, in denen Lambda nützlich ist. Beispielsweise ist es häufig praktisch, wenn Signale in PyQt-Anwendungen wie folgt angeschlossen werden:
Nur dies
w.textChanged.connect(dothing)
würde diedothing
Methode mit einem zusätzlichenevent
Argument aufrufen und einen Fehler verursachen. Die Verwendung des Lambda bedeutet, dass wir das Argument ordentlich löschen können, ohne eine Umhüllungsfunktion definieren zu müssen.quelle
a
Ihnen definierte Lambda und die Funktion sind nicht genau gleich. :) Sie unterscheiden sich__name__
mindestens nach Feld ...Ich finde Lambda nützlich für eine Liste von Funktionen, die dasselbe tun, aber für unterschiedliche Umstände.
Wie die Mozilla-Pluralregeln :
Wenn Sie eine Funktion für alle definieren müssten, würden Sie am Ende verrückt werden.
Auch wäre es nicht schön , mit Funktionsnamen wie sein
plural_rule_1
,plural_rule_2
etc. Und Sie würden braucheneval()
es , wenn Sie auf eine Variable Funktion id sind abhängig.quelle
So ziemlich alles, was Sie damit machen können
lambda
, können Sie entweder mit benannten Funktionen oder mit Listen- und Generatorausdrücken besser machen.Folglich sollten Sie zum größten Teil nur eine davon in praktisch jeder Situation verwenden (außer vielleicht für den im interaktiven Interpreter geschriebenen Scratch-Code).
quelle
Ich benutze Python seit ein paar Jahren und bin noch nie auf einen Fall gestoßen, in dem ich Lambda brauchte . Wirklich, wie das Tutorial sagt, ist es nur für syntaktischen Zucker.
quelle
Ich kann nicht mit Pythons spezieller Implementierung von Lambda sprechen, aber im Allgemeinen sind Lambda-Funktionen sehr praktisch. Sie sind eine Kerntechnik (vielleicht sogar DIE Technik) der funktionalen Programmierung und sie sind auch in objektorientierten Programmen sehr nützlich. Für bestimmte Arten von Problemen sind sie die beste Lösung, sollten Sie also auf keinen Fall vergessen!
Ich schlage vor, Sie informieren sich über Abschlüsse und die Map-Funktion (die auf Python-Dokumente verweist, aber in fast jeder Sprache vorhanden ist, die funktionale Konstrukte unterstützt), um herauszufinden, warum sie nützlich ist.
quelle
Die Lambda-Funktion ist eine unbürokratische Methode zum Erstellen einer Funktion.
Das ist es. Nehmen wir zum Beispiel an, Sie haben Ihre Hauptfunktion und müssen Werte quadrieren. Sehen wir uns den traditionellen Weg und den Lambda-Weg an, um dies zu tun:
Traditioneller Weg:
Der Lambda-Weg:
Sieh den Unterschied?
Lambda-Funktionen passen sehr gut zu Listen wie Listenverständnis oder Karte. Listenverständnis ist in der Tat eine "pythonische" Art, sich mit Lambda auszudrücken. Ex:
Mal sehen, was jedes Element der Syntax bedeutet:
Das ist praktisch, oder? Funktionen wie diese erstellen. Schreiben wir es mit Lambda um:
Verwenden wir jetzt die Karte, die dasselbe ist, aber sprachneutraler. Maps benötigt zwei Argumente:
(i) eine Funktion
(ii) eine iterable
Und gibt Ihnen eine Liste, in der jedes Element die Funktion ist, die auf jedes Element der Iterable angewendet wird.
Mit der Karte hätten wir also:
Wenn Sie Lambdas und Mapping beherrschen, haben Sie eine große Macht, Daten auf präzise Weise zu manipulieren. Lambda-Funktionen sind weder unklar noch beeinträchtigen sie die Klarheit des Codes. Verwechseln Sie etwas Hartes nicht mit etwas Neuem. Sobald Sie anfangen, sie zu verwenden, werden Sie es sehr klar finden.
quelle
Eines der schönen Dinge
lambda
, die meiner Meinung nach unterschätzt werden, ist, dass es eine Möglichkeit ist, eine Bewertung für einfache Formulare aufzuschieben, bis der Wert benötigt wird. Lassen Sie mich erklären.Viele Bibliotheksroutinen sind so implementiert, dass bestimmte Parameter aufrufbar sind (von denen Lambda einer ist). Die Idee ist, dass der tatsächliche Wert nur zu dem Zeitpunkt berechnet wird, zu dem er verwendet wird (und nicht zu dem Zeitpunkt, zu dem er aufgerufen wird). Ein (erfundenes) Beispiel könnte helfen, den Punkt zu veranschaulichen. Angenommen, Sie haben eine Routine, die einen bestimmten Zeitstempel protokolliert. Sie möchten, dass die Routine die aktuelle Zeit minus 30 Minuten verwendet. Du würdest es so nennen
Angenommen, die eigentliche Funktion wird nur aufgerufen, wenn ein bestimmtes Ereignis eintritt und der Zeitstempel erst zu diesem Zeitpunkt berechnet werden soll. Sie können dies so tun
Angenommen, die
log_timestamp
Dose kann solche Callables verarbeiten, wird dies bei Bedarf ausgewertet und Sie erhalten zu diesem Zeitpunkt den Zeitstempel.Es gibt natürlich alternative Möglichkeiten, dies zu tun (
operator
zum Beispiel mit dem Modul), aber ich hoffe, ich habe den Punkt vermittelt.Update : Hier ist ein etwas konkreteres Beispiel aus der Praxis.
Update 2 : Ich denke, dies ist ein Beispiel für einen sogenannten Thunk .
quelle
Wie oben erwähnt, definiert der Lambda-Operator in Python eine anonyme Funktion, und in Python sind Funktionen Schließungen. Es ist wichtig, das Konzept der Verschlüsse nicht mit dem Operator Lambda zu verwechseln, der für sie lediglich syntaktisches Methadon ist.
Als ich vor ein paar Jahren in Python anfing, benutzte ich viel Lambdas, weil ich dachte, sie seien cool, zusammen mit Listenverständnissen. Ich habe jedoch eine große, in Python geschriebene Website mit mehreren tausend Funktionspunkten geschrieben und muss diese pflegen. Ich habe aus Erfahrung gelernt, dass Lambdas möglicherweise in Ordnung sind, um Prototypen zu erstellen, aber nichts über Inline-Funktionen (benannte Verschlüsse) bieten, außer ein paar Tastenanschläge zu speichern oder manchmal auch nicht.
Grundsätzlich läuft dies auf mehrere Punkte hinaus:
Grund genug, sie aufzurunden und in benannte Verschlüsse umzuwandeln. Ich habe jedoch zwei weitere Groll gegen anonyme Schließungen.
Der erste Groll ist einfach, dass sie nur ein weiteres unnötiges Schlüsselwort sind, das die Sprache durcheinander bringt.
Der zweite Groll ist tiefer und auf der Paradigmenebene, dh ich mag es nicht, dass sie einen funktionalen Programmierstil fördern, weil dieser Stil weniger flexibel ist als der Nachrichtenübermittlungs-, objektorientierte oder prozedurale Stil, weil der Lambda-Kalkül nicht Turing- ist. vollständig (zum Glück können wir in Python auch innerhalb eines Lambdas aus dieser Einschränkung ausbrechen). Die Gründe, warum Lambdas diesen Stil fördern, sind:
Es gibt eine implizite Rückkehr, dh sie scheinen Funktionen zu sein.
Sie sind ein alternativer Mechanismus zum Verbergen von Zuständen zu einem anderen, expliziteren, lesbareren, wiederverwendbareren und allgemeineren Mechanismus: Methoden.
Ich bemühe mich sehr, lambda-freies Python zu schreiben und Lambdas sofort zu entfernen. Ich denke, Python wäre eine etwas bessere Sprache ohne Lambdas, aber das ist nur meine Meinung.
quelle
Y = lambda f: (lambda x: x(x))(lambda y: f(lambda *args: y(y)(*args)))
Lambdas sind tatsächlich sehr mächtige Konstrukte, die aus Ideen in der funktionalen Programmierung stammen, und es ist etwas, das in naher Zukunft von Python keineswegs leicht überarbeitet, neu definiert oder entfernt werden kann. Sie helfen Ihnen beim Schreiben von Code, der leistungsfähiger ist, da Sie Funktionen als Parameter übergeben können, also die Idee von Funktionen als erstklassige Bürger.
Lambdas neigen dazu, verwirrend zu werden, aber sobald ein solides Verständnis erreicht ist, können Sie sauberen, eleganten Code wie folgt schreiben:
Die obige Codezeile gibt eine Liste der Quadrate der Zahlen in der Liste zurück. Natürlich können Sie es auch so machen:
Es ist offensichtlich, dass der frühere Code kürzer ist, und dies gilt insbesondere dann, wenn Sie die Kartenfunktion (oder eine ähnliche Funktion, die eine Funktion als Parameter verwendet) nur an einer Stelle verwenden möchten. Dies macht den Code auch intuitiver und eleganter.
Wie @David Zaslavsky in seiner Antwort erwähnte, sind Listenverständnisse nicht immer der richtige Weg, insbesondere wenn Ihre Liste Werte von einem obskuren mathematischen Weg erhalten muss.
Aus praktischer Sicht war einer der größten Vorteile von Lambdas für mich in letzter Zeit die grafische Benutzeroberfläche und die ereignisgesteuerte Programmierung. Wenn Sie sich Rückrufe in Tkinter ansehen, werden sie nur als Argumente für das Ereignis verwendet, das sie ausgelöst hat. Z.B
Was wäre, wenn Sie einige Argumente vorbringen müssten? Etwas so Einfaches wie das Übergeben von 2 Argumenten zum Speichern der Koordinaten eines Mausklicks. Sie können es einfach so machen:
Jetzt können Sie argumentieren, dass dies mithilfe globaler Variablen möglich ist. Möchten Sie sich jedoch wirklich Gedanken über Speicherverwaltung und Datenverlust machen, insbesondere wenn die globale Variable nur an einem bestimmten Ort verwendet wird? Das wäre nur ein schlechter Programmierstil.
Kurz gesagt, Lambdas sind fantastisch und sollten niemals unterschätzt werden. Python-Lambdas sind zwar nicht dasselbe wie LISP-Lambdas (die mächtiger sind), aber Sie können wirklich eine Menge magischer Dinge damit machen.
quelle
main
und definiert sinddo_something_cool
? Was passiert mitx
undy
in der Funktion? Die übergebenen Werte scheinen sofort überschrieben zu werden? Woher weiß die Funktion davonevent
? Könnten Sie einige Kommentare / Erklärungen hinzufügen? Vielen Dankx
undy
als Argumente ando-something-cool
und deren Werte werden in der Funktion festgelegt, um zu veranschaulichen, wie Sie Lambdas verwenden können, um Argumente zu übergeben, bei denen keine erwartet werden. Diewidget.bind
Funktion erwartet einenevent
Parameter, der das GUI-Ereignis in diesem bestimmten Widget identifiziert. Ich empfehle, zur besseren Übersichtlichkeit das Programmiermodell von Tkinter zu lesen.x,y
dannx=event.x
. Überschreibt das nicht den Wert, den Sie übergeben haben? Und woher weiß die Funktion, wasevent
ist? Ich sehe nicht, wo Sie das an die Funktion übergeben. Oder ist es eine Methode? Dürfen Sie auch Minuszeichen in einem Funktionsnamen?x, y
ist nur ein Beispiel zur Veranschaulichung. Ich versuche die Kraft von Lambdas zu zeigen, nicht von Tkinter. :)event
? Sollte Ihr Lambda in diesem Fall nicht lesenlambda event: do_something_cool(event,x,y)
?Lambdas sind im Allgemeinen eng mit dem funktionalen Programmierstil verbunden. Die Idee, dass Sie Probleme lösen können, indem Sie eine Funktion auf einige Daten anwenden und die Ergebnisse zusammenführen, verwendet Google, um die meisten seiner Algorithmen zu implementieren.
Programme, die im funktionalen Programmierstil geschrieben wurden, lassen sich leicht parallelisieren und werden daher mit modernen Mehrkernmaschinen immer wichtiger. Kurz gesagt, NEIN, du solltest sie nicht vergessen.
quelle
Erste Glückwünsche, die es geschafft haben, Lambda herauszufinden. Meiner Meinung nach ist dies ein wirklich mächtiges Konstrukt, mit dem man handeln kann. Der heutige Trend zu funktionalen Programmiersprachen ist sicherlich ein Indikator dafür, dass er weder vermieden werden sollte noch in naher Zukunft neu definiert wird.
Man muss nur ein bisschen anders denken. Ich bin sicher, bald wirst du es lieben. Aber seien Sie vorsichtig, wenn Sie sich nur mit Python beschäftigen. Da das Lambda kein wirklicher Verschluss ist, ist es irgendwie "kaputt": Pythons Lambda ist kaputt
quelle
Beachten Sie, dass dies keine Verurteilung von irgendetwas ist. Jeder hat eine andere Reihe von Dingen, die nicht einfach kommen.
Nein.
Es ist nicht dunkel. In den letzten 2 Teams, an denen ich gearbeitet habe, haben alle diese Funktion die ganze Zeit genutzt.
Ich habe keine ernsthaften Vorschläge zur Neudefinition in Python gesehen, außer die Korrektur der Abschlusssemantik vor einigen Jahren.
Es ist nicht weniger klar, ob Sie es richtig verwenden. Im Gegenteil, mehr Sprachkonstrukte zur Verfügung zu haben, erhöht die Klarheit.
Lambda ist wie Pufferüberlauf? Beeindruckend. Ich kann mir nicht vorstellen, wie Sie Lambda verwenden, wenn Sie denken, dass es ein "Wartungsalptraum" ist.
quelle
Ich benutze Lambdas, um Codeduplikationen zu vermeiden. Dies würde die Funktion leicht verständlich machen. ZB:
Ich ersetze das durch ein temporäres Lambda
quelle
Ich habe heute angefangen, David Mertz 'Buch "Textverarbeitung in Python" zu lesen. Obwohl er eine ziemlich knappe Beschreibung von Lambda hat, ließen die Beispiele im ersten Kapitel in Kombination mit der Erklärung in Anhang A sie (endlich) für mich von der Seite springen und plötzlich verstand ich ihren Wert. Das heißt nicht, dass seine Erklärung für Sie funktionieren wird und ich mich noch in der Entdeckungsphase befinde. Daher werde ich nicht versuchen, diese Antworten zu ergänzen, außer den folgenden: Ich bin neu in Python Ich bin neu in OOP Lambdas waren ein Kampf für mich Jetzt, wo ich Mertz lese, denke ich, dass ich sie bekomme und ich sehe sie als sehr nützlich an, da ich denke, dass sie einen saubereren Ansatz für die Programmierung ermöglichen.
Er reproduziert das Zen von Python, von dem eine Zeile Einfach ist besser als komplex. Als Nicht-OOP-Programmierer, der Code mit Lambdas liest (und bis letzte Woche Listenverständnisse hat), habe ich gedacht: Das ist einfach? . Heute wurde mir endlich klar, dass diese Funktionen den Code tatsächlich viel lesbarer und verständlicher machen als die Alternative - die ausnahmslos eine Art Schleife ist. Ich habe auch festgestellt, dass Python wie ein Jahresabschluss nicht für Anfänger gedacht ist, sondern für Benutzer, die sich weiterbilden möchten. Ich kann nicht glauben, wie mächtig diese Sprache ist. Als mir (endlich) der Zweck und der Wert von Lambdas klar wurde, wollte ich ungefähr 30 Programme zerreißen und gegebenenfalls wieder Lambdas einbauen.
quelle
Ein nützlicher Fall für die Verwendung von Lambdas ist die Verbesserung der Lesbarkeit des Verständnisses langer Listen . In diesem Beispiel
loop_dic
ist die Klarheit kurz, aber stellen Sie sich vor, Sieloop_dic
wären sehr lang. Wenn Sie nur einen einfachen Wert verwenden würden, deri
anstelle der Lambda-Version dieses Werts enthält, erhalten Sie einenNameError
.Anstatt
quelle
Ich kann Ihnen ein Beispiel geben, wo ich Lambda wirklich ernst brauchte. Ich mache ein grafisches Programm, bei dem die Verwendung mit der rechten Maustaste auf eine Datei klickt und ihr eine von drei Optionen zuweist. Es stellt sich heraus, dass in Tkinter (dem GUI-Schnittstellenprogramm, in das ich dies schreibe), wenn jemand eine Taste drückt, es keinem Befehl zugewiesen werden kann, der Argumente aufnimmt. Wenn ich also eine der Optionen gewählt habe und das Ergebnis meiner Wahl sein möchte:
Dann keine große Sache. Aber was ist, wenn ich meine Wahl brauche, um ein bestimmtes Detail zu haben? Wenn ich beispielsweise Auswahl A wähle, wird eine Funktion aufgerufen, die ein Argument aufnimmt, das von der Auswahl A, B oder C abhängt. TKinter konnte dies nicht unterstützen. Lamda war die einzige Möglichkeit, dies zu umgehen ...
quelle
def foo...
und dannfoo
statt übergebenlambda
. Es ist nur mehr Code und Sie müssen sich einen Namen einfallen lassen.Ich benutze es ziemlich oft, hauptsächlich als Nullobjekt oder um Parameter teilweise an eine Funktion zu binden.
Hier einige Beispiele:
So implementieren Sie ein Nullobjektmuster:
zur Parameterbindung:
Angenommen, ich habe die folgende API
Wenn ich dann die empfangenen Daten nicht schnell in eine Datei kopieren möchte, mache ich das:
quelle
ich benutze
lambda
, um Rückrufe zu erstellen, die Parameter enthalten. Es ist sauberer, ein Lambda in eine Zeile zu schreiben, als eine Methode zu schreiben, um dieselbe Funktionalität auszuführen.Zum Beispiel:
im Gegensatz zu:
quelle
Ich bin ein Python-Anfänger. Um eine klare Vorstellung von Lambda zu bekommen, habe ich es mit einer 'for'-Schleife verglichen. in Bezug auf die Effizienz. Hier ist der Code (Python 2.7) -
quelle
timeit
Modul, das in der Regel genauere Ergebnisse liefert als das Subtrahieren vontime.time()
Werten.Lambda ist ein Prozedurkonstruktor. Sie können Programme zur Laufzeit synthetisieren, obwohl Pythons Lambda nicht sehr leistungsfähig ist. Beachten Sie, dass nur wenige Menschen diese Art der Programmierung verstehen.
quelle