Punkt 5: Verwenden Sie die Listeneinschlussnotation anstelle von Karte und Filter (S. 15 ~ 16).
Funktionen höherer Ordnung sind funktional und cool (?). Da sie jedoch nacheinander Lambdas erzeugen, sind sie schwer zu lesen, es sei denn, Sie sind an sie gewöhnt. Guido scheint Funktionen höherer Ordnung überhaupt nicht zu mögen, und es wird eine begrenzte Anzahl von Situationen geben, in denen er sie aktiv nutzen wird.
Wenn Sie die Einschlussnotation verwenden können, schreiben Sie sie in die Einschlussnotation!
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
#Schreiben Sie einen Ausdruck, der jede Sequenz quadriert
# map()Im Falle von
squares = map(lambda x: x ** 2, a)
print(list(squares))
>>>
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
#Im Falle der Einschlussnotation
squares = [x ** 2 for x in a]
print(squares)
>>>
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
Letzteres ist leichter zu sehen, nicht wahr? Fügen wir eine Bedingung hinzu, um nur gerade Zahlen zu extrahieren
#Nur gerade Zahlen werden quadriert und extrahiert
# map()Und filtern()Wenn Sie schreiben
even_squares = map(lambda x: x**2, filter(lambda x: x % 2 == 0, a))
print(list(even_squares))
>>>
[4, 16, 36, 64, 100]
#Im Falle der Einschlussnotation
even_squares = [x **2 for x in a if x % 2 == 0]
print(even_squares)
>>>
[4, 16, 36, 64, 100]
Das ist klarer! Es gibt keinen Raum zum Zögern
Die Einschlussnotation kann übrigens nicht nur für Listen, sondern auch für Wörterbücher und Mengen verwendet werden.
#Invertieren Sie Wörterbuchschlüssel und -werte und erstellen Sie neue Wörterbücher
chile_ranks = {'ghost': 1, 'habanero': 2, 'cayenne': 3}
rank_dist = {rank: name for name, rank in chile_ranks.items()}
chile_len_set = {len(name) for name in rank_dist.values()}
print(rank_dist)
print(chile_len_set)
>>>
{1: 'ghost', 2: 'habanero', 3: 'cayenne'}
{8, 5, 7}
Funktionen höherer Ordnung sind nicht schlecht, aber es ist besser, Code mit Schwerpunkt auf Lesbarkeit zu schreiben. (Außer denen, die den Funktionstyp wirklich mögen ...)
Recommended Posts