generator function को कॉल करने पर बॉडी का कोई कोड नहीं चलता; वह एक generator object लौटाती है। बॉडी तभी चलती है जब आप उस पर next कॉल करते हैं, और वह पहले yield तक चलकर फ्रेम को उसके local variables समेत रोक देती है। हर अगला next ठीक वहीं से चलता है जहां रुका था। बॉडी के रिटर्न होने पर generator StopIteration उठाता है, जिसे for लूप आपके लिए पकड़ लेता है।
इंटरव्यूअर यह क्यों पूछते हैं
यह परखता है कि आप रुकी हुई एग्जीक्यूशन को समझते हैं या नहीं, जो iterators, contextlib से लिखे context managers और async coroutines के पीछे का मॉडल है। इंटरव्यूअर दो वाक्यों में समझ जाता है कि आपने generators सिर्फ इस्तेमाल किए हैं या आप जानते हैं कि yields के बीच फ्रेम बचा रहता है। इससे iterator protocol और send तथा throw पर फॉलो अप भी बनते हैं।
अपना जवाब कैसे स्ट्रक्चर करें
- कहें कि कॉल एक ऑब्जेक्ट लौटाती है और कुछ चलाती नहीं।
- yield के इर्द गिर्द रुकने और फिर चलने का चक्र बताएं।
- बताएं कि लूप को अंत का पता कैसे चलता है।
- इसे iterator protocol से जोड़ें।
उदाहरण जवाब
कॉल करने से लगभग कुछ नहीं होता। Python compile time पर yield कीवर्ड देखता है, फंक्शन को generator मार्क कर देता है, और कॉल बस एक जमे हुए फ्रेम वाला generator object थमा देती है। बॉडी में कुछ भी नहीं चला होता, जिससे लोग उलझते हैं जब वे उम्मीद करते हैं कि ऊपर लिखा validation तुरंत चलेगा। पहला next तब तक चलता है जब तक yield नहीं आता, वह वैल्यू बाहर देता है, और फ्रेम को हर local समेत जिंदा रखते हुए रोक देता है। दोबारा next कॉल करें और एग्जीक्यूशन yield के अगली लाइन से उठ जाती है। जब फंक्शन अंत तक पहुंचती है या खाली return मिलता है, Python StopIteration उठाता है, और for लूप उसे रुकने के इशारे की तरह लेता है। अंदर से generator, iterator protocol पूरा करता है क्योंकि उसमें dunder iter और dunder next दोनों हैं, इसलिए वह हर उस जगह चलता है जहां iterable की उम्मीद हो। streaming pipelines में मैं इसी पर टिका रहता हूं। एक प्रोजेक्ट में हमारे चार transformation stages generators की तरह जुड़े थे, और किसी भी stage के पास कभी एक record से ज्यादा नहीं रहा।
जल्दी ही यह इंटरव्यू देने जा रहे हैं? GhostPilot आपकी लाइव कॉल सुनता है, सवाल पूछे जाते ही उसे पकड़ लेता है, और रियल-टाइम में एक स्ट्रक्चर्ड जवाब आपकी स्क्रीन पर डाल देता है। अगले मॉक में इसे आजमाएं, या ले लें एक $29 Session Pass, कोई सब्सक्रिप्शन नहीं, असली इंटरव्यू के लिए।
देखें यह कैसे काम करता हैफॉलो-अप सवाल जिनकी उम्मीद रखें
- yield from से क्या मिलता है?
- generator पर send और throw कैसे काम करते हैं?
- async generator इससे कैसे अलग है?
Python डेवलपर के और सवाल
आपका इंटरव्यूअर इसका अपना वर्ज़न पूछेगा। फ्री Question Predictor में अपना असली जॉब डिस्क्रिप्शन पेस्ट कीजिए और वो 20 सवाल पाइए जो उस रोल में सबसे ज्यादा पूछे जाने की संभावना है, साथ में यह भी कि हर सवाल असल में क्या टटोल रहा है।
मेरे सवाल प्रेडिक्ट करें