आपको समझने की आवश्यकता है कि उन्हें प्रभावी ढंग से उपयोग करने के लिए डिफ़ॉल्ट मान कैसे काम करते हैं।
कार्य ऑब्जेक्ट्स हैं। इस प्रकार, उनके पास विशेषताएं हैं। इसलिए, यदि मैं यह फ़ंक्शन बनाता हूं:
>>> def f(x, y=[]):
y.append(x)
return y
मैंने एक ऑब्जेक्ट बनाया है।
>>> dir(f)
['__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__',
'__dict__', '__doc__', '__format__', '__get__', '__getattribute__', '__globals__',
'__hash__', '__init__', '__module__', '__name__', '__new__', '__reduce__',
'__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__',
'func_closure', 'func_code', 'func_defaults', 'func_dict', 'func_doc', 'func_globals',
'func_name']
उनमें से एक func_defaults
है: यहाँ अपनी विशेषताएँ हैं। यह वादा करता है, वहां क्या है?
>>> f.func_defaults
([],)
यह एक टुपल है जिसमें फ़ंक्शन के डिफ़ॉल्ट मान होते हैं। यदि कोई डिफ़ॉल्ट मान एक ऑब्जेक्ट है, तो टुपल में उस ऑब्जेक्ट का एक उदाहरण होता है।
यह काफी कुछ counterintuitive व्यवहार की ओर जाता है अगर आप सोच रहे हैं f
एक सूची में कोई आइटम जोड़ता है कि, केवल उस आइटम वाली एक सूची लौट रहा है, तो कोई सूची प्रदान की जाती है:
>>> f(1)
[1]
>>> f(2)
[1, 2]
लेकिन अगर आप जानते हैं कि डिफ़ॉल्ट मान एक वस्तु उदाहरण है कि समारोह के गुणों में से एक में संग्रह किया गया है है, यह बहुत कम counterintuitive है:
>>> x = f(3)
>>> y = f(4)
>>> x == y
True
>>> x
[1, 2, 3, 4]
>>> x.append(5)
>>> f(6)
[1, 2, 3, 4, 5, 6]
यह जानने के बाद, यह स्पष्ट है कि अगर आप चाहते हैं एक नई सूची होने के लिए एक समारोह के पैरामीटर का डिफ़ॉल्ट मान (या कोई नया ओबी जेक्ट), आप आसानी से func_defaults
में ऑब्जेक्ट का एक उदाहरण छीन नहीं सकते हैं। जब भी फ़ंक्शन को कॉल किया जाता है तो आपको एक नया निर्माण करना होगा:
>>>def g(x, y=None):
if y==None:
y = []
y.append(x)
return y
यदि आपकी समस्या हल हो गई है तो आपको एक उत्तर स्वीकार करना चाहिए! कई जवाब बहुत ही जानकारीपूर्ण प्रतीत होते हैं। हालांकि सवाल पुराना है, मुझे लगता है कि प्रतिक्रिया देने के लिए एक अच्छा विचार होगा कि – eipxen
पाइथन में ["कम अस्थिरता" के संभावित डुप्लिकेट: म्यूटेबल डिफ़ॉल्ट तर्क] (http://stackoverflow.com/ प्रश्न/1132 9 41/कम-आश्चर्य-इन-पायथन-द-म्यूटेबल-डिफॉल्ट-तर्क) –