Python डेवलपर इंटरव्यू सवाल

mutable default argument को होने वाला बग क्यों माना जाता है?

इंटरव्यूअर असल में क्या परख रहा है, अपना जवाब कैसे स्ट्रक्चर करें, और एक बोला हुआ उदाहरण जिसे आप अपना सकते हैं।

छोटा जवाब

Default arguments एक ही बार, फंक्शन की definition के समय, evaluate होते हैं, हर कॉल पर नहीं। इसलिए default लिस्ट या dict एक अकेला साझा ऑब्जेक्ट है जो हर कॉल के बीच बना रहता है, तो बदलाव जमा होते जाते हैं और एक caller से दूसरे में लीक होते हैं। हल यह है कि default None रखें और बॉडी के अंदर None मिलने पर ताजा container बनाएं।

इंटरव्यूअर यह क्यों पूछते हैं

यह जल्दी से जांच लेता है कि आप समझते हैं या नहीं कि def स्टेटमेंट खुद चलता है और definition के समय ऑब्जेक्ट बांध देता है। इंटरव्यूअर को यह इसलिए पसंद है कि गलत जवाब पूरे भरोसे के साथ आता है: लोग जिद करते हैं कि लिस्ट हर कॉल पर नई बनती है। इससे नाम बांधने और वैल्यू कॉपी करने के फर्क की बात भी खुलती है, जिस पर Python के कई हैरान करने वाले व्यवहार टिके हैं।

अपना जवाब कैसे स्ट्रक्चर करें

  • कहें कि defaults definition के समय एक ही बार evaluate होते हैं।
  • साझा ऑब्जेक्ट का नतीजा समझाएं।
  • None sentinel वाला हल बताएं।
  • बताएं कि immutable defaults सुरक्षित हैं।

उदाहरण जवाब

बोला हुआ उदाहरण, पहले व्यक्ति में

क्योंकि default ऑब्जेक्ट एक ही बार बनता है, जब Python def स्टेटमेंट चलाता है, और उसके बाद हर वह कॉल जो वह argument नहीं देती उसी ऑब्जेक्ट को पाती है। अगर वह लिस्ट है और फंक्शन उसमें append करती है, तो तीसरी कॉल को वह सब दिखेगा जो पहली और दूसरी छोड़ गईं। मुझे यह एक caching helper में मिला था जो options का खाली dict default लेता था। लंबे चलने वाले वर्कर में वह dict दिनों तक बढ़ता रहा और आखिर में एक request को किसी बेमेल tenant की settings मिल गईं, जिसे समझाना मजेदार अनुभव नहीं था। हल उबाऊ है: default None रखें, फिर बॉडी में साफ तौर पर None की जांच करके नया dict बनाएं, ताकि जानबूझकर भेजा गया खाली dict भी माना जाए। integers, strings या None जैसे immutable defaults ठीक हैं क्योंकि उन्हें कोई बदल नहीं सकता। Ruff इसे बिना किसी सेटिंग के B006 के रूप में पकड़ लेता है, तो जिस प्रोजेक्ट में linting CI से जुड़ी है वहां यह बग रिव्यू तक पहुंचना ही नहीं चाहिए।

जल्दी ही यह इंटरव्यू देने जा रहे हैं? GhostPilot आपकी लाइव कॉल सुनता है, सवाल पूछे जाते ही उसे पकड़ लेता है, और रियल-टाइम में एक स्ट्रक्चर्ड जवाब आपकी स्क्रीन पर डाल देता है। अगले मॉक में इसे आजमाएं, या ले लें एक $29 Session Pass, कोई सब्सक्रिप्शन नहीं, असली इंटरव्यू के लिए।

देखें यह कैसे काम करता है

फॉलो-अप सवाल जिनकी उम्मीद रखें

  • साफ None जांच की जगह or इस्तेमाल करना जोखिम भरा क्यों है?
  • क्या tuples defaults के तौर पर सुरक्षित हैं?
  • definition के समय होने वाला evaluation और कहां लोगों को चौंकाता है?

Python डेवलपर के और सवाल

आपका इंटरव्यूअर इसका अपना वर्ज़न पूछेगा। फ्री Question Predictor में अपना असली जॉब डिस्क्रिप्शन पेस्ट कीजिए और वो 20 सवाल पाइए जो उस रोल में सबसे ज्यादा पूछे जाने की संभावना है, साथ में यह भी कि हर सवाल असल में क्या टटोल रहा है।

मेरे सवाल प्रेडिक्ट करें

मुश्किल सवाल पूछे जाने से पहले उनकी रिहर्सल कीजिए

एक लाइव कोपायलट के साथ प्रैक्टिस कीजिए, फिर तैयार होकर अंदर जाइए। $29 Session Pass आपको इंटरव्यू पार करा देता है, न कोई सब्सक्रिप्शन, न कोई लॉक-इन।

GhostPilot पाएं