2012-09-05 13 views
53

में उपज जनरेटर में कोई अगला() फ़ंक्शन नहीं है this question में, मेरे पास पाइथन जनरेटर का उपयोग करके एक अंतहीन अनुक्रम है। लेकिन एक ही कोड पायथन 3 में काम नहीं करता है क्योंकि ऐसा लगता है कि next() फ़ंक्शन नहीं है। next फ़ंक्शन के बराबर क्या है?पाइथन 3

def updown(n): 
    while True: 
     for i in range(n): 
      yield i 
     for i in range(n - 2, 0, -1): 
      yield i 

uptofive = updown(6) 
for i in range(20): 
    print(uptofive.next()) 
+0

संबंधित: [पायथन में __next__ विधि का उपयोग करने में समस्याएं] (https://stackoverflow.com/questions/5982817/problems-using-next-method-in-python) – user2314737

उत्तर

78

अजगर 3 में, next(uptofive) बजाय uptofive.next() का उपयोग करें।

अंतर्निहित next() फ़ंक्शन पायथन 2.6 या उससे अधिक में भी काम करता है।

29

पायथन 3 में, वाक्यविन्यास को और अधिक सुसंगत बनाने के लिए, next() विधि का नाम बदलकर __next__() कर दिया गया था। आप इसका इस्तेमाल कर सकते हैं। यह PEP 3114 में समझाया गया है।

ग्रेग के समाधान के बाद और builtin next() function बुला की सिफारिश की है (जो तब एक वस्तु की __next__() विधि खोजने की कोशिश करता)।

+1

विशेष रूप से फ़ंक्शन संस्करण 2 और 3 के बीच पोर्टेबल है , जबकि विधियों (नाम परिवर्तन की वजह से) नहीं हैं। – holdenweb