2011-08-28 9 views
5

मैं अजगर इटरेटर पर थोड़ा सा खो गया हूं। मैं कभी-कभी उनका उपयोग करता हूं, लेकिन मुझे खुद को बनाने की याद नहीं है। मैंने कहीं पढ़ा है कि मुझे याद नहीं है, जहां इस तरह की एक कोड:अगले() और __next __() के लिए पुनरावृत्ति वर्ग विधियां क्या हैं, और क्या अंतर है?

class Foo(object): 
    def __init__(self): 
     self.something = "initial_value" 
    def __iter__(self): 
     return self 
    def next(self): 
     # I don't quite remember what was here :S 
     return self.something 

मुझे लगता है कि __iter__() विधि पुनरावर्तक वापस जाने के लिए माना जाता है, और उस iterator एक अगली विधि अधिकार होना चाहिए? फिर __next__() विधि के बारे में क्या? क्या यह __iter__() विधि के साथ एक और इटरेटर लौटने के बिना सीधे कक्षा में फिर से चलने के लिए है?

+0

** foo ** एक पुनरावर्तक है। इस मामले में यह बस खुद को लौटता है। एक वस्तु पुनरावृत्ति का समर्थन कर सकती है, लेकिन एक पुनरावर्तक नहीं हो सकती है। – Wes

+0

धन्यवाद, कोड तय किया गया। – yasar

उत्तर

7

PEP 3114 का नाम iterator.next()iterator.__next__() पर बदला गया। यह संस्करण 3.0 में लागू किया गया था। उपरोक्त लिंक में सभी गौरी विवरण शामिल हैं।

+1

मुझे लगता है कि आपका मतलब है 'इटरेटर .__ अगला __() '। :-) –

+0

@ross धन्यवाद –

4

next का नाम बदलकर पाइथन 3 में __next__ कर दिया गया है। इसके लिए, इसे अगले आइटम को वापस करना चाहिए, या StopIteration बढ़ाएं यदि कोई और नहीं है।

+0

यह __iter __() से अलग कैसे है? –

संबंधित मुद्दे