2017-04-18 8 views
5

मैं सोच रहा था अगर किसी को समझा सकता है क्यों इन दो उदाहरणों अंततः समान ही परिणाम:अजगर वर्ग डिफ़ॉल्ट पैरामीटर

class Myclass(): 

def __init__ (self, parameter=None) 

    if parameter is None: 
     self.parameter = 1.0 
    else: 
     self.parameter = parameter 

और:

class Myclass(): 

def __init__ (self, parameter=None) 

    if parameter: 
     self.parameter = parameter 
    else: 
     self.parameter = 1.0 

मैं सहज समझ में 'अगर पहले ... कोई नहीं है 'लेकिन मैं दूसरे उदाहरण के साथ संघर्ष करता हूं। क्या दोनों उपयोग करने के लिए ठीक है?

मुझे लगता है यह काफी एक आसान सवाल इसलिए हो सकता है अगर कोई मुझे किसी भी पढ़ने कि अंतर यह है कि बहुत अच्छा होगा समझने के लिए मदद मिलेगी के लिए प्रत्यक्ष कर सकते हैं।

धन्यवाद!

+7

वे हमेशा एक ही परिणाम नहीं लौटाते हैं। इसे देखने के लिए पैरामीटर = 0 भेजने के साथ प्रयास करें। – wim

+0

'कोई नहीं' * झूठी * है, इसलिए दूसरी स्थिति में दूसरी शाखा में लिया जाता है जब डिफ़ॉल्ट मान का उपयोग किया जाता है। हालांकि, अपवाद हैं। –

+0

[सत्य मूल्य परीक्षण] (https://docs.python.org/3/library/stdtypes.html#truth-value-testing) –

उत्तर

2

वे पहली बार कोड स्निपेट में, समान नहीं होते हैं, parameter 1.0 होगा यदि और केवल यदिparameterNone है, लेकिन दूसरा एक में , parameter हो जाएगा किसी भी falsy value व्याप्ति निम्न मान के लिए 1.0 अजगर में सभी falsy हैं:

  • कोई नहीं

  • झूठी

  • किसी भी सांख्यिक प्रकार का शून्य, उदाहरण के लिए, 0, 0L, 0.0, 0j।

  • किसी भी खाली अनुक्रम, उदाहरण के लिए, ',(), []।

  • किसी भी खाली मानचित्रण, उदाहरण के लिए, {}। एक अशून्य() उपयोगकर्ता परिभाषित वर्गों की

  • उदाहरणों, अगर वर्ग को परिभाषित करता या लेन() विधि, जब कि विधि पूर्णांक शून्य या bool मान FALSE देता है।

तो पहला कोड स्निपेट अधिक सख्त है। सरकारी डॉक्स देखें करने के लिए:

+0

जो समझ में आता है, उत्तर देने और लिंक के लिए धन्यवाद! – Ale

1

पहले उदाहरण में, हालत ही सच्चा हो सकता है अगर parameter सचमुच None है।

दूसरे उदाहरण में, हालत केवल truthy मूल्यों के लिए सच हो जाएगा।

दिखा यह होगा की एक आसान तरीका:

def meth1 (parameter): 
    return parameter is None 

def meth2 (parameter): 
    return not(bool(parameter)) 

print([(meth1(v), meth2(v)) for v in [False, None, 0]]) 

> [(False, True), (True, True), (False, True)] 
+0

क्या आप एक साधारण उदाहरण के साथ प्रदर्शित कर सकते हैं? – matusko

+0

मैं बारिश में बाहर था, और पानी मेरी टचस्क्रीन के साथ गड़बड़ कर रहा था, इसलिए कोई भी टाइपिंग कठिन थी। मैंने सवाल भी गलत तरीके से पढ़ा। अभी अपडेट हो रहा है – Carcigenicate

संबंधित मुद्दे