2011-03-08 10 views
30

Bene, stavo usando il metodo itertools.cycle().next() con Python 2.6.6, ma ora che ho aggiornato a 3.2 ho notato che l'oggetto itertools.cycle() non ha metodo next().itertools.cycle(). Next()?

ho usato per ciclo di una stringa nel metodo di una classe Spinnerspin(). Quindi, se si pedala la tupla ('|', '/', '-', '\\', '|', '/', '-'), sarà stampare: |, /, -, \, |, /, -, |, / e così via ...

Ho cercato le note di rilascio di Python 3.0 , 3.1 e 3.2 e non ha notato alcun cambiamento su questo. Quando questo è cambiato? C'è una semplice alternativa per ottenere la stessa funzionalità di prima?

Grazie in anticipo.

+1

+1 per questo caso di 'cycle' uso divertente :) –

risposta

42

iter.next() è stato rimosso in python 3. Utilizzare invece next(iter). Quindi nel tuo esempio cambia itertools.cycle().next() a next(itertools.cycle())

C'è un good example here insieme a vari altri porting a python 3 suggerimenti. Esso mette a confronto anche diversi altri idiomi next() in pitone 2.x vs python 3.x

+2

Avete risposto quasi la stessa cosa, come @Sven (beh, lo so, non potrebbe essere diverso), ma il tuo link ha salvato la tua risposta. Non conoscevo l'http: //diveintopython3.org/... Segnalibro! Grazie per la risposta e il link. :) –

+0

Sì, entrambi abbiamo risposto all'incirca alla stessa ora. Contento di aver trovato il collegamento utile, ho trovato che sia un buon riferimento. – d0ugal

+0

Perché è stato rimosso 'iter.next()'? –

14

In Python 3.x, gli iteratori non hanno più it.next(). utilizzare invece next(it), che funziona anche in Python 2.6 o versioni successive. Internamente, ciò chiamerà it.next() in Python 2.xe it.__next__() in Python 3.x.

Problemi correlati