ja studiuje odpowiedzi z Nosklo w What is the most "pythonic" way to iterate over a list in chunks?, gdzie określonej funkcji:pętli wewnętrznej instrukcji return
def chunker(seq, size):
return (seq[pos:pos + size] for pos in xrange(0, len(seq), size))
Czy ktoś tłumaczy mi, jak działa, gdy zwrot następuje pętli for? Próbowałem wykonać następujące czynności:
def chunker2(seq, size):
for pos in xrange(0, len(seq), size):
return seq[pos:pos + size]
, ale nie uzyskuję tego samego wyniku. Uwaga niż w przykładzie Nosklo, chunker()
nazywa iteracyjnie jak w poniższym przykładzie:
animals = ['cat', 'dog', 'rabbit', 'duck', 'bird', 'cow', 'gnu', 'fish']
for group in chunker(animals, 3):
print group
Dodając wydruki, zauważyłem, że ten ostatni for
pętla jest wykonywana 3 razy (to idzie trhough listy animals
), ale dla pętli w chunker
funkcja jest wykonywana tylko raz. Jak to jest, że jest tylko jeden powrót i mogę zobaczyć 3 odciski?
https://docs.python.org/2/tutorial/datastructures.html#list-comprehensions – Bakuriu
To nie jest pętla for; to wyrażenie generujące. Wygląda to trochę jak pętla for, która sprawia, że początkujący ciągle myślą, że to jeden. Zobacz http://stackoverflow.com/questions/1756096/understanding-generators-in-python i http://legacy.python.org/dev/peps/pep-0289/ – user2357112
Dziękuję bardzo! Sprawdzę te linki. – user3764177