2011-01-14 14 views
5

मैं जो करना चाहता हूं वह नीचे दिए गए कोड में 5 से 5 पूर्णांक प्रिंट करता है लेकिन मुझे जो भी मिलता है वह इटरेटर का पता है?पूर्णांक प्रिंट करने के लिए एक पुनरावर्तक का उपयोग

def main(): 

    l = [] 
    for i in range(0,5): 
     l.append(i) 

    it = iter(l) 

    for i in range(0,5): 
     print it 
     it.next() 

if __name__ == '__main__': 
    main() 
+0

जैसा कि आप जानते, कॉलिंग 'अगली() 'इटेटरेटर में अगला मान देता है। तो लूप बॉडी को 'प्रिंट it.next() 'पढ़ना चाहिए। –

+0

अपने इटरेटर का उत्पादन करने का त्वरित तरीका: it = iter (रेंज (5)) – nakedfanatic

उत्तर

9

मूल्यों लौटे उपयोग करने के लिए पुनरावर्तक द्वारा, तुम इतनी तरह इटरेटर की next() विधि का उपयोग करें:

try: 
    while True: 
     val = it.next() 
     print(val) 
except StopIteration: 
    print("Iteration done.") 

अगले() दोनों इटरेटर को आगे बढ़ाने और अगले तत्व लौटने का उद्देश्य है। रोकथाम होने पर रोकथाम फेंक दिया जाता है।

चूंकि यह काफी बोझिल है, यह सब अच्छी तरह से में लपेटा जाता है के लिए-वाक्य रचना:

for i in it: 
    print(i) 
print("Iteration done.") 

अधिक लिंक:

+0

पहले कोड ब्लॉक पर, क्या प्रयास कथन शामिल नहीं करना संभव है? – pandoragami

+0

हां, लेकिन फिर अपवाद आगे फेंक दिया जाएगा। –

+0

संस्करण 3 (या तो) में दिखता है आपको __next__ – kdubs

3

आप एक इटरेटर है, तो आप एक सीमा से अधिक नहीं इस पर पुनरावृति करने के लिए, है।

for i in it: 
    print(i) 
+0

क्या सी #+ का उपयोग करते हुए एक पुनरावर्तक को पुन: प्रस्तुत करने का कोई तरीका है? – pandoragami

+0

नहीं, पायथन पॉइंटर्स का बिल्कुल उपयोग नहीं करता है। और तुम क्यों चाहोगे? मानदंड का उपयोग मूल्य प्राप्त करने के लिए किया जाता है, और पायथन पहले से ही आपको वह मान देता है। पायथन के साथ काम करते समय सी ++ शब्दों में सोचने की कोशिश न करें। – Hollister

+1

पायथन 'it.next()' लगभग सी ++ '* यह ++' के बराबर है। आप संचालन को अलग नहीं करते हैं। –

3

जब आप पाश के लिए उपयोग कर रहे हैं, आप वास्तव में इटरेटर वस्तु की __next__ विधि परोक्ष बुला रहे हैं। तो, आप बस रेंज की तरह कुछ उपयोग नहीं करेंगे, बल्कि इसके बजाय केवल इटेटरेटर का उपयोग करें।

for i in it: 
    print i 

क्या इसके लायक है के लिए, xrange अजगर 2 में और range अजगर 3 में एक iterator देता है, ताकि आप केवल उन्हीं के साथ अपना पहला पाश बारे में अपने वांछित समाधान के लिए,

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