आप शायद ही कभी अपरिभाषित होगा चर, और यह आमतौर पर मतलब है कि आप मीटर है जब आप ऐसा करेंगे एक गलती का पालन करें।हालांकि, आसानी से, अधिकांश प्रकार के मान जिन्हें सामान्य रूप से डिफ़ॉल्ट (खाली कंटेनर, शून्य-लंबाई तार, शून्य, और) के रूप में उपयोग किया जाता है, वे पाइथन में "झूठी" हैं, इसलिए आप कभी-कभी इस तरह की चीजें देखते हैं जो इसका लाभ उठाते हैं अजगर में बूलियन ऑपरेटरों काम:
name = name or "Guido" # if name is empty, set it to "Guido"
numb = numb or 42 # if numb is zero, set it to 42
कारण यह काम करता है अजगर बंद हो जाता है कि or
का मूल्यांकन करता है, तो पहला तर्क "truthy," जो छोटे-सर्किटिंग कहा जाता है, और दोनों ही मामलों में वास्तविक तर्क देता है, बजाय है इसके परिणामस्वरूप केवल True
या False
। तो यदि name
"जिम" है तो "Jim" or "Guido"
"Jim"
का मूल्यांकन करता है क्योंकि "Jim"
गैर-शून्य-लंबाई वाली स्ट्रिंग है और इसलिए "सत्य" है।
बेशक, यह तब तक अच्छा काम नहीं करता है जब आप यह नहीं जानते कि आप किस प्रकार के मूल्य से निपट रहे हैं और/या "गलत" मान मान्य मान है।
name = raw_input("What is your name? ") or "Guido"
एक अन्य आम मुहावरा है जब एक शब्दकोश में आइटम के साथ काम कर प्रयोग किया जाता है: हालांकि, यह विन्यास फाइल और raw_input()
तरह बातें जहां एक लापता मूल्य एक खाली स्ट्रिंग वापस आ जाएगी साथ बहुत अच्छी तरह से काम करता है। शब्दकोश वर्ग की get()
विधि आपको चर का उपयोग करने के लिए डिफ़ॉल्ट मान निर्दिष्ट करने देता है यदि चर शब्दकोश में नहीं है।
name = values.get("name", "Guido")
यह जब अपने समारोह **kwargs
परंपरा का उपयोग करके कीवर्ड तर्क पारित किया गया है इस्तेमाल किया जा सकता। आप भी यह चर के साथ इस्तेमाल कर सकते हैं, के रूप में globals()
और locals()
कार्यों एक शब्दकोश के रूप में क्षेत्र में वर्तमान में, लौट क्रमशः, सभी वैश्विक या स्थानीय चर:
name = locals().get("name", "Guido")
लेकिन, जैसा कि मैंने कहा, आप शायद ही कभी होगा पाइथन में वास्तव में अपरिभाषित चर। वेब ढांचे जैसे मामलों में, आपको एक शब्दकोष के रूप में क्वेरी स्ट्रिंग तर्क पारित किया जाएगा, उदाहरण के लिए, और शब्दकोश पर .get()
विधि का उपयोग कर सकते हैं।
दुर्लभ मामले में जहां एक नाम वास्तव में मौजूद नहीं है (उदाहरण के लिए, आपकी कॉन्फ़िगरेशन फ़ाइल पायथन सिंटैक्स में है और आप इसे पार्सिंग मॉड्यूल के रूप में आयात कर रहे हैं, और आप चाहते हैं कि उपयोगकर्ता इसे छोड़ने में सक्षम हों कुछ मान ... या कुछ और समान रूप से निराला) तो आप getattr()
उपयोग कर सकते हैं, जो (शब्दकोश की .get()
) की तरह एक डिफ़ॉल्ट मान स्वीकार करता है:
import config
name = getattr(config, "name", "Guido") # rather than just name.config
या बस यह एक NameError
फेंक और इसे पकड़ कर सकते हैं।
हां यह ऐसा लगता है कि यह एक डुप्लिकेट है। धन्यवाद एडम! –
'$ foo || =" क्या "' 'foo' को फिर से सौंपेगा यदि यह पहले से ही * झूठा * है। बेशक 'undef' गलत है, लेकिन फिर शून्य और शून्य स्ट्रिंग है। इसके बजाए केवल एक अपरिभाषित मूल्य उपयोग स्लैश को पुन: असाइन करने के लिए, '$ foo // = "क्या" ' – Borodin
नोट करें कि' // '(और उसका एक्सटेंशन,' // = ') perl 5.10 में जोड़ा गया था। यदि आप अभी भी 5.8.x पर फंस गए हैं, तो आप '// =' का उपयोग करने में सक्षम नहीं होंगे (और यदि आपको संभव हो तो आपको गंभीरता से उन्नयन पर विचार करना चाहिए)। –