list comprehension पूरी लिस्ट तुरंत मेमोरी में बना देती है; generator expression एक lazy iterator लौटाती है जो आपके कंज्यूम करने पर एक एक आइटम बनाता है। Generators स्थिर मेमोरी लेते हैं और सोर्स खत्म होने से पहले ही yield करना शुरू कर सकते हैं, लेकिन आप उन पर सिर्फ एक बार इटरेट कर सकते हैं, और न index ले सकते हैं न लंबाई।
इंटरव्यूअर यह क्यों पूछते हैं
देखने में यह सिंटैक्स की छोटी बात लगती है, पर असल में मेमोरी की समझ का सवाल है। इंटरव्यूअर देखते हैं कि one liner लिखने से पहले आप डेटा के साइज के बारे में सोचते हैं या नहीं, और brackets को parentheses से बदलते समय आप जो सौदा कर रहे हैं वह जानते हैं या नहीं। सिंगल पास वाली सीमा वही हिस्सा है जो कैंडिडेट भूल जाते हैं, और इससे असली बग आते हैं जब कोई एक ही generator पर दो बार इटरेट करता है और चुपचाप कुछ नहीं मिलता।
अपना जवाब कैसे स्ट्रक्चर करें
- एक लाइन में eager बनाम lazy बताएं।
- मेमोरी पर पड़ने वाला असर बताएं।
- बताएं कि generators क्या नहीं कर सकते।
- कहें कि आप डिफॉल्ट किसे रखते हैं और क्यों।
उदाहरण जवाब
Square brackets मुझे ऐसी लिस्ट देते हैं जो अगली लाइन चलने से पहले पूरी बन चुकी होती है, जबकि parentheses एक generator देते हैं जो हर आइटम मांगने पर बनाता है। कुछ सौ आइटम पर फर्क नगण्य है, तो मैं लिस्ट लेता हूं क्योंकि उसे डीबग करना आसान है और मैं उसे दो बार देख सकता हूं। जैसे ही सोर्स कोई फाइल, डेटाबेस cursor या API paginator बनता है, मैं generator पर चला जाता हूं। एक reconciliation job में एक बड़े export को लिस्ट में पढ़ने से container अपनी मेमोरी लिमिट पार कर गया और बार बार kill होता रहा, और brackets की एक जोड़ी को parentheses में बदलने से peak memory कुछ मेगाबाइट पर आ गई, क्योंकि हमारे पास कभी एक ही row होती थी। पेच यह है कि generator एक पास के बाद खत्म हो जाता है। मैंने किसी को generator की गिनती लॉग करके फिर उस पर लूप चलाते देखा है, और लूप की बॉडी कभी चली ही नहीं। अगर मुझे डेटा एक से ज्यादा बार चाहिए तो मैं जानबूझकर उसे materialize करता हूं और मेमोरी की कीमत मान लेता हूं।
जल्दी ही यह इंटरव्यू देने जा रहे हैं? GhostPilot आपकी लाइव कॉल सुनता है, सवाल पूछे जाते ही उसे पकड़ लेता है, और रियल-टाइम में एक स्ट्रक्चर्ड जवाब आपकी स्क्रीन पर डाल देता है। अगले मॉक में इसे आजमाएं, या ले लें एक $29 Session Pass, कोई सब्सक्रिप्शन नहीं, असली इंटरव्यू के लिए।
देखें यह कैसे काम करता हैफॉलो-अप सवाल जिनकी उम्मीद रखें
- comprehension में walrus operator क्या बदलता है?
- कई generators को आप आपस में कैसे जोड़ेंगे?
- set comprehension कब ज्यादा सही रहता है?
Python डेवलपर के और सवाल
आपका इंटरव्यूअर इसका अपना वर्ज़न पूछेगा। फ्री Question Predictor में अपना असली जॉब डिस्क्रिप्शन पेस्ट कीजिए और वो 20 सवाल पाइए जो उस रोल में सबसे ज्यादा पूछे जाने की संभावना है, साथ में यह भी कि हर सवाल असल में क्या टटोल रहा है।
मेरे सवाल प्रेडिक्ट करें