पायथन में एक जनरेटर फ़ंक्शन से एक बार में एक मूल्य कैसे प्राप्त करें?


113

बहुत बुनियादी सवाल - पायथन में एक जनरेटर से एक मूल्य कैसे प्राप्त करें?

अब तक मैंने पाया कि मैं लिखकर प्राप्त कर सकता हूं gen.next()। मैं सिर्फ यह सुनिश्चित करना चाहता हूं कि यह सही तरीका है?

जवाबों:


154

हाँ, या next(gen)2.6+ में।


3
मैं जानता हूं कि यह शर्मनाक है कि यह काम क्यों नहीं करता है? W1 = params.next()लेकिन एक त्रुटि मिलती हैAttributeError: 'generator' object has no attribute 'next'
चार्ली पार्कर


2
@CharlieParker आप पायथन 3 का उपयोग कर रहे होंगे!
अक्षय लोकुर

66

पायथन <= 2.5 में, का उपयोग करें gen.next()। यह सभी पायथन 2.x संस्करणों के लिए काम करेगा, लेकिन पायथन 3.x नहीं

पायथन में = = 2.6, का उपयोग करें next(gen)। यह एक अंतर्निहित फ़ंक्शन है, और स्पष्ट है। यह पायथन 3 में भी काम करेगा।

ये दोनों एक विशेष रूप से नामित फ़ंक्शन को समाप्त करते हैं next(), जिसे उपवर्ग द्वारा ओवरराइड किया जा सकता है। हालांकि, पायथन 3 में, इस फ़ंक्शन को __next__()अन्य विशेष कार्यों के अनुरूप होने के लिए नाम दिया गया है।


16

उपयोग (अजगर 3 के लिए)

next(generator)

यहाँ एक उदाहरण है

def fun(x):
    n = 0
    while n < x:
        yield n
        n += 1
z = fun(10)
next(z)
next(z)

छपना चाहिए

0
1


2

अजगर 3 और इसके बाद के उपयोग में एक जनरेटर वस्तु के साथ जुड़े मूल्य प्राप्त करने के लिए next(<your generator object>)। अगले कॉल के बाद () कतार में क्रमिक वस्तु मान पैदा करता है।


1

अजगर 3 में आपके पास नहीं है gen.next(), लेकिन आप अभी भी उपयोग कर सकते हैं next(gen)। थोड़ा विचित्र अगर आप मुझसे पूछें, लेकिन यह कैसे है।


1
यह अजीब नहीं है। अजगर 3 चीजों को तोड़ने वाला है और केवल स्पष्ट बेहतर कोड की अनुमति देता है। पीछे की ओर अनुकूलता न होना कुछ टूटने वाले परिवर्तनों का बिंदु है।
19 को ताताराइज करें
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.