break
एक for
बयान में जनरेटर के उपयोग के सिर्फ एक तत्व को चुनने के लिए , याlist(itertools.islice(gen, 1))
आपके उदाहरण के अनुसार (शाब्दिक रूप से) आप कुछ ऐसा कर सकते हैं:
while True:
...
if something:
for my_element in myfunct():
dostuff(my_element)
break
else:
do_generator_empty()
यदि आप चाहते हैं कि " जब भी मुझे पसंद हो तो [[एक बार उत्पन्न] जनरेटर से सिर्फ एक तत्व प्राप्त करें " (मुझे लगता है कि मूल इरादे से 50% और सबसे आम इरादे) तब:
gen = myfunct()
while True:
...
if something:
for my_element in gen:
dostuff(my_element)
break
else:
do_generator_empty()
इस तरह से स्पष्ट उपयोग से generator.next()
बचा जा सकता है, और अंत में इनपुट से निपटने की आवश्यकता नहीं होती है (गुप्त)StopIteration
अपवाद हैंडलिंग या अतिरिक्त डिफ़ॉल्ट मान की तुलना।
else:
के for
बयान अनुभाग केवल जरूरत है अगर तुम अंत के जनरेटर के मामले में कुछ खास करना चाहते हैं।
पर ध्यान दें next()
/ .next()
:
पायथन 3 में .next()
विधि को .__next__()
अच्छे कारण के लिए नाम दिया गया था : इसका निम्न-स्तर (PEP 3114) माना जाता है। पाइथन 2.6 से पहले बिलिन फ़ंक्शन next()
मौजूद नहीं था। और इसे स्थानांतरित करने के लिए भी चर्चा की गई थीnext()
कि operator
मॉड्यूल (जो कि बुद्धिमान होगा) करने के , क्योंकि इसकी दुर्लभ आवश्यकता और निर्मित नामों की संदिग्ध मुद्रास्फीति थी।
next()
बिना डिफॉल्ट का उपयोग करना अभी भी बहुत ही निम्न-स्तर का अभ्यास है - StopIteration
खुले तौर पर सामान्य अनुप्रयोग कोड में नीले रंग से बोल्ट की तरह गुप्त को फेंकना । और next()
डिफ़ॉल्ट प्रहरी के साथ उपयोग करना - जो एक के लिए सबसे अच्छा एकमात्र विकल्प होना चाहिएnext()
सीधे में सीधे केbuiltins
- सीमित है और अक्सर अजीब गैर-पाइथोनिक तर्क / रीडबेलिटी का कारण देता है।
नीचे पंक्ति: अगले () का उपयोग करना बहुत दुर्लभ होना चाहिए - जैसे operator
मॉड्यूल के कार्यों का उपयोग करना । का उपयोग करते हुए for x in iterator
, islice
, list(iterator)
संभव है और काफी हमेशा - और अन्य कार्यों के मूल पुनरावर्तक को स्वीकार आवेदन स्तर पर iterators का उपयोग करने का प्राकृतिक तरीका है। next()
निम्न स्तर का है, एक अतिरिक्त अवधारणा है, जो स्पष्ट नहीं है - जैसा कि इस धागे से पता चलता है। जबकि का उपयोग करते हुए जैसे break
में for
पारंपरिक है।