stavo studiando la risposta da Nosklo in What is the most "pythonic" way to iterate over a list in chunks?, dove ha definito la funzione:ciclo for all'interno di un'istruzione return
def chunker(seq, size):
return (seq[pos:pos + size] for pos in xrange(0, len(seq), size))
Qualcuno mi spiega come funziona il ritorno quando è seguito da un ciclo for? Ho cercato di fare quanto segue:
def chunker2(seq, size):
for pos in xrange(0, len(seq), size):
return seq[pos:pos + size]
ma non ottengo lo stesso risultato. Nota che in Nosklo esempio, chunker()
è chiamato in modo iterativo, come nell'esempio qui sotto:
animals = ['cat', 'dog', 'rabbit', 'duck', 'bird', 'cow', 'gnu', 'fish']
for group in chunker(animals, 3):
print group
Con l'aggiunta di stampe, ho notato che quest'ultimo for
ciclo viene eseguito 3 volte (si va trhough lista animals
), ma il per loop nella funzione chunker
viene eseguita una sola volta. Quindi, come mai c'è solo un ritorno e posso vedere 3 stampe?
https://docs.python.org/2/tutorial/datastructures.html#list-comprehensions – Bakuriu
Questo non è un ciclo for; è un'espressione generatrice. Assomiglia molto a un ciclo for, il che rende i principianti costantemente convinti che sia uno. Vedi http://stackoverflow.com/questions/1756096/understanding-generators-in-python e http://legacy.python.org/dev/peps/pep-0289/ – user2357112
Grazie mille! Controllerò quei link. – user3764177