Map-Methode in Python

8
%Vor%

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?

    
AbKDs 22.08.2013, 18:29
quelle

5 Antworten

9

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:

%Vor%

und sehen:

%Vor%     
alecxe 22.08.2013, 18:33
quelle
5

Das liegt daran, dass addGoodFood nichts zurückgibt. Lass es etwas zurückgeben:

%Vor%

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:

%Vor%

__init__ ist eine spezielle Methode, die die Initialisierung einer Klasse behandelt. Wenn Sie es verwenden, müssen Sie f.init() nicht ausführen.

    
iCodez 22.08.2013 18:31
quelle
4

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:

%Vor%

Um die Frage zu beantworten: Wie funktioniert map() unter der Haube? hier ist wie:

%Vor%

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.

    
Óscar López 22.08.2013 18:32
quelle
3

result = map(function, iterable) entspricht:

%Vor%

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.

    
Viktor Kerkez 22.08.2013 18:31
quelle
3

Weil Sie nichts von addGoodFood function zurückgegeben haben.

    
quelle