इतने सारे सवाल यहाँ। मुझे कम से कम दो दिखते हैं, शायद तीन:
- पॉप (ए, बी) क्या करता है? / एक दूसरा तर्क क्यों हैं?
- किस चीज के
*argsलिए इस्तेमाल किया जा रहा है?
पहला सवाल तुच्छ मानक पुस्तकालय संदर्भ में तुच्छ उत्तर दिया गया है :
पॉप (कुंजी [, डिफ़ॉल्ट])
यदि कुंजी शब्दकोष में है, तो उसे हटा दें और उसका मान लौटाएं, अन्यथा डिफ़ॉल्ट लौटें। यदि डिफ़ॉल्ट नहीं दिया गया है और कुंजी शब्दकोश में नहीं है, तो KeyError को उठाया जाता है।
दूसरा प्रश्न पायथन भाषा संदर्भ में शामिल किया गया है :
यदि फॉर्म "* पहचानकर्ता" मौजूद है, तो इसे किसी भी अतिरिक्त स्थितीय मापदंडों को प्राप्त करने वाले टपल के लिए इनिशियलाइज़ किया जाता है, जो खाली ट्यूपल के लिए डिफ़ॉल्ट है। यदि फॉर्म "** पहचानकर्ता" मौजूद है, तो इसे किसी भी अतिरिक्त कीवर्ड तर्क प्राप्त करने वाले नए शब्दकोश में आरंभीकृत किया जाता है, जो नए खाली शब्दकोश में डिफ़ॉल्ट होता है।
दूसरे शब्दों में, popफ़ंक्शन कम से कम दो तर्क लेता है। पहले दो को नाम दिए गए हैं selfऔर key; और बाकी को ट्यूपल कहा जाता है args।
जब *argsकॉल के साथ पास किया जाता है तो अगली पंक्ति में क्या होता है self.data.pop, इसका उलटा है - टपल *argsका विस्तार स्थितीय मापदंडों से होता है, जो पास हो जाते हैं। इसे पायथन भाषा संदर्भ में समझाया गया है :
यदि फ़ंक्शन कॉल में वाक्य रचना * अभिव्यक्ति दिखाई देती है, तो अभिव्यक्ति को एक अनुक्रम का मूल्यांकन करना चाहिए। इस क्रम के तत्वों को इस तरह माना जाता है जैसे कि वे अतिरिक्त स्थैतिक तर्क थे
संक्षेप में, a.pop()लचीला होना चाहता है और किसी भी स्थितिगत मापदंडों को स्वीकार करना चाहता है, ताकि वह इस अनजान संख्या में स्थितीय मापदंडों को पास कर सके self.data.pop()।
यह आपको लचीलापन देता है; अभी dataएक होने के लिए होता है dict, और इसलिए self.data.pop()एक या दो पैरामीटर लेता है; लेकिन अगर आप dataएक प्रकार के रूप में बदल गए हैं जो self.data.pop()आपको कॉल करने के लिए 19 पैरामीटर लेता है तो आपको क्लास aको बिल्कुल भी बदलना नहीं पड़ेगा । आपको अभी भी किसी भी कोड को बदलना a.pop()होगा जो आवश्यक 19 मापदंडों को पारित करने के लिए कहा जाता है।
help(b.data.pop)में REPL में आलसी हैं ।