2010-02-24 10 views

उत्तर

10

मुझे नहीं लगता कि यह एक आधिकारिक नाम है, यह सिर्फ एक चालाक/आलसी तरीका संक्षिप्त होना करने के लिए है।

a = b if b else {} 

या:: यह मोटे तौर पर के बराबर है

if b: 
    a = b 
else: 
    a = {} 

मैं एक टिप्पणी के रूप में यह लिखा लेकिन मुझे लगता है कि यहाँ उल्लेख के लायक है:

आप जब इस चाल का उपयोग कर बहुत सावधान रहना होगा। यदि आपका इरादा किसी चीज का कोई डिफ़ॉल्ट मान निर्धारित करना है, तो इस चाल का उपयोग करने से स्पष्ट रूप से is None परीक्षण लिखना बेहतर होगा। इसका कारण यह है कि कोई भी एकमात्र चीज नहीं है जो एक बुलियन संदर्भ में झूठी मूल्यांकन करती है। 0, [], {}, ... भी गलत का मूल्यांकन करते हैं। इसलिए यदि आप इन विशेष मामलों के बारे में नहीं सोचते हैं तो यह चाल आपको अपेक्षित परिणाम नहीं दे सकती है।

a = b if b is not None else {} 
+0

तो चलो उसे एक दें :) –

+0

बहुत ज्यादा var = b ?? सी # में नया बी()। –

+1

@ फिलिप: इसी तरह, उस उद्देश्य के लिए जानबूझकर सी # में जोड़ा गया था। पायथन में यह चाल काम करती है क्योंकि किसी को भी बुलियन संदर्भ में झूठा माना जाता है। लेकिन 0, [], {}, आदि ... भी झूठे का मूल्यांकन करते हैं, इसलिए सावधान रहें। यदि आप '??' का अनुकरण करना चाहते हैं, तो इस चाल पर भरोसा करने से स्पष्ट रूप से 'कोई नहीं' परीक्षण लिखना बेहतर होगा। –

1

एक विशेष निर्माण नहीं है यही कारण है कि, कम से कम मेरे लिए कुछ हद तक थक आँखों के लिए। यह

(b or {}) 

के परिणाम को असाइन करने का कह रहा है।

तो, अगर ख एक झूठी मूल्य, एक, हो जाता है {} (खाली शब्दकोश शाब्दिक) अन्यथा यह ख का मूल्य हो जाता है।

+0

बिल्कुल, लेकिन शायद इसके लिए एक नाम है। शॉर्ट-सर्किट असाइनमेंट वह है जिसे मैं कहने का लुत्फ उठाऊंगा। शायद सशर्त असाइनमेंट? लेकिन वह आम तौर पर?: ऑपरेटर को संदर्भित करता है। –

+0

यह वास्तव में किसी भी प्रकार की शॉर्ट सर्किटिंग पर भरोसा नहीं कर रहा है, हालांकि ... अगर मैं आरएचएस पर कुछ दुष्प्रभाव को दबा रहा था तो मैं इसके लिए जाऊंगा। लेकिन इसके लिए? –

+0

यदि आप सी ++ या जावा से आ रहे हैं तो यह एक "विशेष निर्माण" है जहां एकमात्र चीजें जिन्हें आप "या" के दोनों तरफ रख सकते हैं, वे बूलियन हैं। यहां, बी कोई ऑब्जेक्ट हो सकता है (संभावित रूप से संदर्भ के आधार पर एक शब्दकोश) ताकि (बी या {}) * एक * बूलियन नहीं है। पाइथोनिस्टा के लिए बिल्कुल सामान्य, लेकिन यह स्पष्ट नहीं है कि आप पहली बार पाइथन सीख रहे हैं। – MatrixFrog

1

डिफ़ॉल्ट असाइनमेंट मुहावरा

+1

आधिकारिक या आपके द्वारा आविष्कार किया गया? –

+1

@ स्टेफानो, मैंने सोचा कि हम जो सोचते हैं उसके लिए हम मतदान कर रहे हैं आधिकारिक नाम होना चाहिए :) –

2

अभिव्यक्ति b or {} सिर्फ एक सरल boolean OR expression है। इस बारे में विशेष सिर्फ इतना है कि यह अभिव्यक्ति की जरूरत नहीं एक बूलियन मान परिभाषा के अनुसार अन्य भाषाओं में की तरह वापसी करता है:

अभिव्यक्ति x or y पहले का मूल्यांकन करता है एक्स; यदि x सत्य है, तो इसका मूल्य वापस कर दिया गया है; अन्यथा, वाई का मूल्यांकन किया गया है और परिणामी मूल्य वापस कर दिया गया है।

(ध्यान दें कि न तो and है और न ही or मूल्य को प्रतिबंधित करने और वे False और True पर लौटने टाइप करें, बल्कि पिछले का मूल्यांकन तर्क लौटने। यह कभी कभी उपयोगी है, उदाहरण के लिए, अगर s एक स्ट्रिंग है कि एक डिफ़ॉल्ट रूप से प्रतिस्थापित किया जाना चाहिए है यदि यह खाली है, तो अभिव्यक्ति s or 'foo' वांछित मान उत्पन्न करती है। क्योंकि not को किसी भी मूल्य का आविष्कार करना पड़ता है, इसलिए यह उसी तर्क के मूल्य को इसके तर्क के रूप में वापस करने के लिए परेशान नहीं है, उदाहरण के लिए, not 'foo'False उत्पन्न करता है, '' नहीं।)

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