La documentazione per itertools.cycle Python() fornisce un'implementazione pseudo-codice come:Perchè itertools.cycle di Python deve creare una copia del iterabile?
def cycle(iterable):
# cycle('ABCD') --> A B C D A B C D A B C D ...
saved = []
for element in iterable:
yield element
saved.append(element)
while saved:
for element in saved:
yield element
seguito, si afferma: "Nota, questo membro del toolkit può richiedere notevole spazio di memoria (a seconda della lunghezza del l'iterabile). "
io in fondo stavo andando su questa strada, tranne che ho fatto questo, che non richiede la creazione di una copia del iterabile:
def loop(iterable):
it = iterable.__iter__()
while True:
try:
yield it.next()
except StopIteration:
it = iterable.__iter__()
yield it.next()
x = {1, 2, 3}
hard_limit = 6
for i in loop(x):
if hard_limit <= 0:
break
print i
hard_limit -= 1
stampe:
1
2
3
1
2
3
Sì, mi rendo conto che la mia implementazione non funzionerebbe per gli str, ma potrebbe essere fatto a. Sono più curioso del motivo per cui crea un'altra copia. Ho la sensazione che abbia a che fare con la garbage collection, ma non sono ben studiato in quest'area di Python.
Grazie!
@Martijn come è stata aggiunta l'evidenziazione della sintassi? Non riuscivo a capire come farlo ... – stantonk
Non l'ho fatto; Ho aggiunto il tag 'python' e quindi l'evidenziazione viene applicata automaticamente. Ma anche senza l'evidenziazione del tag è spesso indovinato in ogni caso. –
Ahhh, ma il tag python2.7 non lo fa? strano ... – stantonk