2016-06-09 6 views
0

Ich bin Java-Programmierer. Ich habe vor ein paar Tagen begonnen, Python zu lernen. Ich frage mich: Gibt es irgendwelche ÄquivalentePython Java für jedes gleichwertige


map.forEach(System.out::println)


in Python mit Lambda-Ausdrücke? Oder mit for-Schleife:


for e in map: print(e)


Antwort

3

Es gibt kein Äquivalent zu Javas Imperativ Iterable.forEach oder Stream.forEach Methode. Es gibt eine map Funktion, analog zu Javas Stream.map, aber es ist für das Anwenden von Transformationen auf ein iterables. Wie Java's Stream.map, wendet es die Funktion nicht wirklich an, bis Sie eine Terminal-Operation für den Rückgabewert ausführen.

Sie könnten map missbrauchen den Job von forEach zu tun:

list(map(print, iterable)) 

aber es ist eine schlechte Idee, Nebenwirkungen von einer Funktion erzeugen, die nicht und den Aufbau einer riesigen Liste haben, sollten Sie nicht brauchen, . Es wäre wie

someList.stream().map(x -> {System.out.println(x); return x;}).collect(Collectors.toList()) 

in Java zu tun.

Der Standard-Weg, dies in Python zu tun, eine Schleife wäre:

for thing in iterable: 
    print(thing) 
0

Python hat auch eine map Funktion und nutzt die Syntax map(function, iterable, ...)

Siehe docs Python: https://docs.python.org/2/library/functions.html#map

+0

Aber warum dies: a = {1, 2, 3} Karte (lambda x: print (x), a) - wird nichts gedruckt? –

+1

Siehe diese SO Frage: http://stackoverflow.com/questions/7731213/print-doesnt-print-when-its-in-map-python Ich hoffe, es beantwortet Ihre Frage :) – Brian

+0

@Don_Quijote Karte gibt eine neue zurück Liste mit der gleichen Anzahl von Elementen wie die ursprüngliche Liste. Die Druckfunktion gibt jedoch nichts zurück. Daher ist es nicht möglich, diese neue Liste zu erstellen. – Matthias

Verwandte Themen