2011-03-08 18 views
30

ठीक है, मैं पाइथन 2.6.6 के साथ itertools.cycle().next() विधि का उपयोग कर रहा था, लेकिन अब जब मैंने 3.2 में अपडेट किया है तो मैंने देखा है कि itertools.cycle() ऑब्जेक्ट में कोई विधि नहीं है next()itertools.cycle()। अगला()?

मैंने इसे Spinner वर्ग की विधि में एक स्ट्रिंग चक्र के लिए उपयोग किया। तो अगर हम चक्र टपल ('|', '/', '-', '\\', '|', '/', '-'), इसे प्रिंट होगी: |, /, -, \, |, /, -, |, / और इतने पर ...

मैं अजगर 3.0 के रिलीज नोट्स खोज की है , 3.1 और 3.2 और इस पर कोई बदलाव नहीं देखा। जब यह बदल गया है? क्या पहले की तरह ही कार्यक्षमता प्राप्त करने के लिए कोई आसान विकल्प है?

अग्रिम धन्यवाद।

+1

+1 में अन्य next() मुहावरे की तुलना करता है :) –

उत्तर

42

iter.next() पायथन 3 में हटा दिया गया था। इसके बजाय next(iter) का उपयोग करें। तो अपने उदाहरण में next(itertools.cycle())

को itertools.cycle().next() बदल विभिन्न अन्य अजगर 3 सुझावों को पोर्टिंग के साथ एक good example here नहीं है। यह 'चक्र` के इस अजीब उपयोग के मामले के लिए अजगर 2.x बनाम पायथन 3.x

+2

आपने लगभग उसी चीज़ का उत्तर दिया है जिसे @Sven (ठीक है, मुझे पता है, यह अलग नहीं हो सकता), लेकिन आपके लिंक ने आपका जवाब बचाया। मुझे http: //diveintopython3.org/नहीं पता था ... बुकमार्क किया गया! उत्तर और लिंक के लिए धन्यवाद। :) –

+0

यूप - हम दोनों ने लगभग एक ही समय में जवाब दिया। खुशी है कि आपको लिंक उपयोगी लगता है, मैंने इसे एक अच्छा संदर्भ पाया है। – d0ugal

+0

'iter.next()' क्यों हटाया गया था? –

14

पायथन 3.x में, इटरेटर के पास it.next() नहीं है। इसके बजाय next(it) का उपयोग करें, जो पायथन 2.6 या उससे ऊपर में भी काम करता है। आंतरिक रूप से, यह पायथन 3.x में पाइथन 2.x और it.__next__() में it.next() पर कॉल करेगा।