Unterschied zwischen chain (* iter) vs chain.from_iterable (iter)

8

Ich bin wirklich fasziniert von all den interessanten Iteratoren in iwertools und eine Verwirrung, die ich hatte, ist der Unterschied zwischen diesen beiden Funktionen und warum chain.from_iterator existiert.

%Vor%

Was ist der Unterschied zwischen den beiden Funktionen?

    
costrouc 16.09.2016, 13:44
quelle

3 Antworten

8

Ersteres kann nur mit entpackbaren Iterablen umgehen. Letzteres kann mit Iterablen umgehen, die nicht vollständig entpackt werden können, wie z. B. unendliche Generatoren.

Betrachten Sie

%Vor%

Darüber hinaus ist nur das Auspacken eine eifrige Vorab-Kosten-Aktivität. Wenn Ihr iterables also Effekte hat, die Sie träge auswerten möchten, ist from_iterable die beste Option.

    
kojiro 16.09.2016, 13:48
quelle
6

chain(*foo(5)) entpackt den gesamten Generator, packt ihn in ein Tupel und verarbeitet ihn dann.

chain.from_iterable(foo(5)) fragt den Generator ab, der aus foo(5) value für value erstellt wurde.

Probieren Sie foo(1000000) aus und beobachten Sie, wie die Speicherbelegung steigt und sinkt.

    
glglgl 16.09.2016 13:47
quelle
3

* entpackt den Iterator, dh er iteriert den Iterator, um seine Werte an die Funktion zu übergeben. chain.from_iterable iteriert den Iterator einzeln nacheinander.

    
deceze 16.09.2016 13:47
quelle

Tags und Links