जब आप एक सरणी पैरामीटर के साथ पायथन में कोई फ़ंक्शन परिभाषित करते हैं, तो उस पैरामीटर का दायरा क्या है?पायथन में डिफ़ॉल्ट पैरामीटर का दायरा क्या है?
यह उदाहरण पायथन ट्यूटोरियल से लिया जाता है:
def f(a, L=[]):
L.append(a)
return L
print f(1)
print f(2)
print f(3)
प्रिंटों:
[1]
[1, 2]
[1, 2, 3]
मैं काफी यकीन है कि अगर मैं समझता हूँ कि यहाँ क्या हो रहा है नहीं कर रहा हूँ। क्या इसका मतलब यह है कि सरणी का दायरा समारोह के बाहर है? सरणी कॉल से कॉल करने के लिए अपने मूल्य क्यों याद करती है? अन्य भाषाओं से आ रहा है, मैं केवल इस व्यवहार की अपेक्षा करता हूं अगर चर स्थिर था। अन्यथा ऐसा लगता है कि इसे हर बार रीसेट किया जाना चाहिए। और वास्तव में, जब मैंने निम्नलिखित कोशिश की:
def f(a):
L = []
L.append(a)
return L
मुझे वह व्यवहार मिला जो मुझे अपेक्षित था (सरणी प्रत्येक कॉल पर रीसेट की गई थी)।
तो मुझे ऐसा लगता है कि मुझे बस def f(a, L=[]):
लाइन की आवश्यकता है - L
चर का दायरा क्या है?
यहां देखें: http://stackoverflow.com/questions/1132941/least-astonishment-in-python-the-mutable-default-argument – sth
@sth - धन्यवाद, चर्चा बहुत बढ़िया है। यह लाइन मुझे बहुत वर्णनात्मक और सहायक के रूप में मारती है - "[पायथन] फ़ंक्शन परिभाषा पर डिफ़ॉल्ट तर्क को बांधती है, न कि फ़ंक्शन निष्पादन पर।" – charlie