pyplot - python plt show




Unterschied zwischen einer 'for'-Schleife und einer Karte (2)

Vom Titel her gibt es einen Unterschied. Nun auf mein Szenario angewendet: Betrachten wir eine Klasse Dummy :

class Dummy:
    def __init__(self):
        self.attached = []

    def attach_item(self, item):
        self.attached.append(item)

Wenn ich das benutze:

D = Dummy()
items = [1, 2, 3, 4]
for item in items:
    D.attach_item(item)

Ich bekomme tatsächlich D.attached = [1, 2, 3, 4] . Wenn ich jedoch die Funktion attach_item den items D.attached bleibt D.attached leer.

map(D.attach_item, items)

Was macht es?


Eine sehr interessante Frage, die eine interessante Antwort hat.

Die map Funktion gibt ein Map-Objekt zurück, das iterierbar ist. map führt ihre Berechnung träge durch, sodass die Funktion nur aufgerufen wird, wenn Sie das Objekt durchlaufen.

Also wenn du es tust:

x = map(D.attach_item, items)
for i in x:
    continue

Das erwartete Ergebnis wird angezeigt.


Zitieren der documentation

Gibt einen Iterator zurück, der auf jedes Element des Iterationselements eine Funktion anwendet, wodurch die Ergebnisse erhalten werden.

was bedeutet, dass Sie den Iterator sammeln müssen, z

list(map(D.attach_item, items))

> [None, None, None, None]

Hmmm, seltsam. Warum keine, keine, ...

Ja, Sie können eine beliebige Schleife in einer Map-Anweisung konvertieren. Dies ist jedoch nicht immer nützlich. Map nimmt einen Parameter und tut etwas damit (in den meisten Fällen) und gibt ihn ohne Nebeneffekte zurück! Hier ist ein Beispiel:

def add(a):
    return a + 3
list(map(add, items))

> [4, 5, 6, 7]

Die wahre Kraft entsteht, wenn Sie sie mit anderen Funktionen wie dem filter kombinieren

def add(a):
    return a + 3
def odd(a):
    return a % 2 == 1
list(map(add, filter(odd, items)))

> [4, 6]




function