Einführung
Anonyme Funktionen in Python werden als lambda-Funktionen bezeichnet. Sie sind eine Möglichkeit, Funktionen ohne Namen zu erstellen. Sie eignen sich für das Erstellen von kurzen Funktionen, die nur einmal verwendet werden.
This tutorial is from open-source community. Access the source code
Anonyme Funktionen in Python werden als lambda-Funktionen bezeichnet. Sie sind eine Möglichkeit, Funktionen ohne Namen zu erstellen. Sie eignen sich für das Erstellen von kurzen Funktionen, die nur einmal verwendet werden.
Listen können in-place sortiert werden. Mit der sort-Methode.
s = [10,1,7,3]
s.sort() ## s = [1,3,7,10]
Man kann in umgekehrter Reihenfolge sortieren.
s = [10,1,7,3]
s.sort(reverse=True) ## s = [10,7,3,1]
Das scheint einfach genug zu sein. Wie sortieren wir jedoch eine Liste von Wörterbüchern?
[{'name': 'AA', 'price': 32.2,'shares': 100},
{'name': 'IBM', 'price': 91.1,'shares': 50},
{'name': 'CAT', 'price': 83.44,'shares': 150},
{'name': 'MSFT', 'price': 51.23,'shares': 200},
{'name': 'GE', 'price': 40.37,'shares': 95},
{'name': 'MSFT', 'price': 65.1,'shares': 50},
{'name': 'IBM', 'price': 70.44,'shares': 100}]
Nach welchen Kriterien?
Man kann die Sortierung durch Verwendung einer Schlüsselfunktion steuern. Die Schlüsselfunktion ist eine Funktion, die das Wörterbuch erhält und den für die Sortierung interessanten Wert zurückgibt.
portfolio = [
{'name': 'AA', 'price': 32.2,'shares': 100},
{'name': 'IBM', 'price': 91.1,'shares': 50},
{'name': 'CAT', 'price': 83.44,'shares': 150},
{'name': 'MSFT', 'price': 51.23,'shares': 200},
{'name': 'GE', 'price': 40.37,'shares': 95},
{'name': 'MSFT', 'price': 65.1,'shares': 50},
{'name': 'IBM', 'price': 70.44,'shares': 100}
]
def stock_name(s):
return s['name']
portfolio.sort(key=stock_name)
Hier ist das Ergebnis.
## Überprüfen, wie die Wörterbücher nach dem `name`-Schlüssel sortiert werden
[
{'name': 'AA', 'price': 32.2,'shares': 100},
{'name': 'CAT', 'price': 83.44,'shares': 150},
{'name': 'GE', 'price': 40.37,'shares': 95},
{'name': 'IBM', 'price': 91.1,'shares': 50},
{'name': 'IBM', 'price': 70.44,'shares': 100},
{'name': 'MSFT', 'price': 51.23,'shares': 200},
{'name': 'MSFT', 'price': 65.1,'shares': 50}
]
Im obigen Beispiel ist die Schlüsselfunktion ein Beispiel für eine Callback-Funktion. Die sort()-Methode "ruft zurück" auf eine von Ihnen bereitgestellte Funktion auf. Callback-Funktionen sind oft kurze Funktionen auf einer Zeile, die nur für diese eine Operation verwendet werden. Programmierer fragen sich oft nach einem Kurzweg zur Angabe dieser zusätzlichen Verarbeitung.
Verwenden Sie eine Lambda-Funktion anstelle der Funktion zu erstellen. Im vorherigen Sortierbeispiel.
portfolio.sort(key=lambda s: s['name'])
Dies erstellt eine namenlose Funktion, die einen einzigen Ausdruck 计算。Der obige Code ist viel kürzer als der ursprüngliche Code.
def stock_name(s):
return s['name']
portfolio.sort(key=stock_name)
## vs lambda
portfolio.sort(key=lambda s: s['name'])
if, while usw.sort().Lesen Sie einige Daten eines Aktienportfolios und konvertieren Sie sie in eine Liste:
>>> import report
>>> portfolio = list(report.read_portfolio('portfolio.csv'))
>>> for s in portfolio:
print(s)
Stock('AA', 100, 32.2)
Stock('IBM', 50, 91.1)
Stock('CAT', 150, 83.44)
Stock('MSFT', 200, 51.23)
Stock('GE', 95, 40.37)
Stock('MSFT', 50, 65.1)
Stock('IBM', 100, 70.44)
>>>
Versuchen Sie die folgenden Anweisungen, die das Portfolio-Daten alphabetisch nach dem Aktiennamen sortieren.
>>> def stock_name(s):
return s.name
>>> portfolio.sort(key=stock_name)
>>> for s in portfolio:
print(s)
... überprüfen Sie das Ergebnis...
>>>
In diesem Teil extrahiert die stock_name()-Funktion den Namen einer Aktie aus einem einzelnen Eintrag in der portfolio-Liste. sort() verwendet das Ergebnis dieser Funktion, um den Vergleich durchzuführen.
Versuchen Sie, das Portfolio nach der Anzahl der Anteile mit einem lambda-Ausdruck zu sortieren:
>>> portfolio.sort(key=lambda s: s.shares)
>>> for s in portfolio:
print(s)
... überprüfen Sie das Ergebnis...
>>>
Versuchen Sie, das Portfolio nach dem Preis jeder Aktie zu sortieren
>>> portfolio.sort(key=lambda s: s.price)
>>> for s in portfolio:
print(s)
... überprüfen Sie das Ergebnis...
>>>
Hinweis: lambda ist ein nützlicher Kurzweg, da es Ihnen ermöglicht, eine spezielle Verarbeitungsfunktion direkt im Aufruf von sort() zu definieren, im Gegensatz dazu, dass Sie zunächst eine separate Funktion definieren müssen.
Herzlichen Glückwunsch! Sie haben das Lab zu anonymen Funktionen und Lambda abgeschlossen. Sie können in LabEx weitere Labs absolvieren, um Ihre Fähigkeiten zu verbessern.