पर विचार करें:अजगर सूची इटरेटर व्यवहार और अगले (इटरेटर)
>>> lst = iter([1,2,3])
>>> next(lst)
1
>>> next(lst)
2
तो, इटरेटर आगे बढ़ रहा है, के रूप में उम्मीद, परिवर्तनशील एक ही वस्तु है कि द्वारा नियंत्रित किया।
यह किया जा रहा मामला है, मैं उम्मीद करेंगे:
a = iter(list(range(10)))
for i in a:
print(i)
next(a)
हर दूसरे तत्व को छोड़ने के लिए: next
करने के लिए कॉल एक बार इटरेटर अग्रिम चाहिए, फिर निहित पाश द्वारा किए गए कॉल यह दूसरी बार अग्रिम चाहिए - और इस दूसरे कॉल का नतीजा i
को सौंपा जाएगा।
ऐसा नहीं है। लूप सूची में आइटमों के सभी प्रिंट करता है, बिना किसी छोड़े किए।
मेरा पहला विचार यह था कि ऐसा हो सकता है क्योंकि लूप iter
को पारित होने पर कॉल करता है, और यह एक स्वतंत्र इटरेटर दे सकता है - ऐसा नहीं है, क्योंकि हमारे पास iter(a) is a
है।
तो, next
क्यों इस मामले में पुनरावर्तक को अग्रिम नहीं करता है?
के रूप में खोलने के लिए प्रिंट करेगा, मुझे दुभाषिया से इस व्यवहार से अवगत नहीं था। मुझे खुशी है कि मैंने पाया कि कुछ वास्तविक समस्या को हल करते समय इसके बारे में सोचने में काफी समय लग रहा था। – brandizzi
... \ * मर जाता है *। इसका सबसे बुरा यह है कि, मुझे शायद एक हफ्ते पहले किसी के लिए इस दुभाषिया व्यवहार का जिक्र करना याद रखना चाहिए। – lvc
दिलचस्प। मैंने एक के लिए कोशिश की: अगला (ए); प्रिंट I और सोचा कि मैं 1 तक कूदूंगा और 1,3,5,7,9 प्रिंट करूंगा। लेकिन फिर भी यह 0,2,4,6,8 है। क्यूं कर? – user2290820