Nachdem ich diese Klasse deklariert habe, habe ich diesen Code geschrieben:
%Vor% Ich kann nicht verstehen, wie die Kartenfunktion hinter der Haube funktioniert, warum gibt sie eine Liste mit None
zurück, aber wenn ich f.goodFood
überprüfe, wurden die Elemente dort hinzugefügt?
map
wendet eine Funktion auf ein iterables an und gibt eine neue Liste zurück, in der die Funktion auf jedes Element angewendet wurde.
In Ihrem Fall wird None
angezeigt, weil f.addGoodFood
function nichts zurückgibt.
Zu Testzwecken ändern Sie addGoodFood
so:
und sehen:
%Vor% Das liegt daran, dass addGoodFood
nichts zurückgibt. Lass es etwas zurückgeben:
map
erstellt eine Liste der Ergebnisse des Aufrufs von addGoodFood
für jedes Element in der Liste. Und da die Methode append
einer Liste immer None
zurückgibt, erhalten Sie eine Liste von None
.
Vielleicht möchten Sie auch Ihre init
-Funktion zu dieser ändern:
__init__
ist eine spezielle Methode, die die Initialisierung einer Klasse behandelt. Wenn Sie es verwenden, müssen Sie f.init()
nicht ausführen.
Der Code in der Frage gibt eine Liste mit None
-Elementen zurück, weil addGoodFood()
nicht explizit etwas zurückgibt (implizit wird None
zurückgegeben). map()
erfasst die Ergebnisse der von Ihnen aufgerufenen Funktion und erstellt eine neue Liste mit diesen Ergebnissen.
Sie sollten map()
nicht mit einer Funktion verwenden, die keinen Wert zurückgibt. In diesem Fall ist addGoodFood()
nicht ein guter Kandidat für die Verwendung. So sollten Sie es schreiben:
Um die Frage zu beantworten: Wie funktioniert map()
unter der Haube? hier ist wie:
In der obigen Funktion ist es offensichtlich, warum Sie eine Liste von None
-Elementen als Ergebnis erhalten: Wenn die übergebene Funktion None
zurückgibt, führt die Schleife result.append(None)
aus, und die zurückgegebene Liste enthält nur None
in jeder Position.
result = map(function, iterable)
entspricht:
Also wird intern eine Liste erstellt, in der das Ergebnis der Anwendung der Funktion auf jedes Element in der Liste angehängt wird.
Da Ihre Funktion addGoodFood
nichts zurückgibt, gibt die Funktion map
eine Liste von None
s zurück.
Ihre Funktion hat einen Nebeneffekt, um ihre Elemente an die goodFoods
-Liste anzuhängen, die goodFoods
-Liste wird ausgefüllt und enthält alle Elemente. Aber da, wie gesagt, die Funktion zurückgibt, hat nothing map eine Liste zurückgegeben, die dieselbe Größe wie die ursprüngliche Liste hat (da sie auf jedes Element angewendet wird), voll von None
s.
Weil Sie nichts von addGoodFood
function zurückgegeben haben.
Tags und Links python list functional-programming