मैं धीरे-धीरे पाइथन जनरेटर के आसपास अपने सिर को लपेटने जा रहा हूं।फ़ंक्शन से रिटर्निंग जनरेटर
हालांकि यह अब के लिए वास्तविक जीवन समस्या नहीं है, मैं अब भी सोच रहा हूं कि मैं एक फ़ंक्शन से जनरेटर क्यों नहीं लौटा सकता।
जब मैं yield
के साथ फ़ंक्शन को परिभाषित करता हूं, तो यह जनरेटर के रूप में कार्य करता है। लेकिन अगर मैं इसे के अंदर परिभाषित करता हूं और इसके बजाय इसे वापस करने का प्रयास करता हूं, तो मुझे सामान्य कार्य मिलता है, यानी next
विधि वाला जनरेटर नहीं।
दूसरे शब्दों में, give_gen()
नीचे दिए गए कोड में क्यों काम नहीं करता है?
#!/usr/bin/python
import time
def gen(d):
n = 0
while True:
n = n + d
time.sleep(0.5)
yield n
def give_gen(d):
def fn():
n = 0
while True:
n = n + d
time.sleep(0.5)
yield n
return fn
if __name__ == '__main__':
g = give_gen(3) # does not work
g = gen(3) # works well
while True:
print g.next()
# AttributeError: 'function' object has no attribute 'next'
# in case of give_gen
मैं फ़ंक्शन से जेनरेटर क्यों नहीं लौटा सकता?