मैं रेखा के अर्थ समझ में नहीं आता:का उपयोग करते हुए "और" और "या" अजगर तार के साथ ऑपरेटर
parameter and (" " + parameter) or ""
जहां पैरामीटर स्ट्रिंग
क्यों एक and
का उपयोग करना चाहते हैं और or
ऑपरेटर, सामान्य रूप से, अजगर तारों के साथ?
मैं रेखा के अर्थ समझ में नहीं आता:का उपयोग करते हुए "और" और "या" अजगर तार के साथ ऑपरेटर
parameter and (" " + parameter) or ""
जहां पैरामीटर स्ट्रिंग
क्यों एक and
का उपयोग करना चाहते हैं और or
ऑपरेटर, सामान्य रूप से, अजगर तारों के साथ?
आप parameter
का मूल्य उपयोग कर रहे हैं मान लीजिए, लेकिन अगर मूल्य None
कहना है, तो आप के बजाय एक खाली स्ट्रिंग None
के बजाय ""
करना चाहते हैं। आप सामान्य रूप से क्या करेंगे?
if parameter:
# use parameter (well your expression using `" " + parameter` in this case
else:
# use ""
यह अभिव्यक्ति क्या कर रही है। सबसे पहले आप को समझना चाहिए क्या and
और or
ऑपरेटर करता है:
a and b
रिटर्न b
अगर एक True
है, बाकी a
देता है।a or b
a
देता है यदि True
है, तो b
लौटाता है।तो, आपकी अभिव्यक्ति:
parameter and (" " + parameter) or ""
जो प्रभावी रूप से के बराबर है:
parameter - A1
लिए मूल्यांकन किया जाता है:
(parameter and (" " + parameter)) or ""
# A1 A2 B
# A or B
कैसे अभिव्यक्ति करता है, तो मूल्यांकन किया जाता है True
:
result = (True and " " + parameter) or ""
result = (" " + parameter) or ""
result = " " + parameter
parameter - A1
None
है:
result = (None and " " + parameter) or ""
result = None or ""
result = ""
एक सामान्य सुझाव के रूप में, यह सशर्त अभिव्यक्ति के लिए A if C else B
प्रपत्र अभिव्यक्ति का उपयोग करने के लिए बेहतर और अधिक पठनीय है। तो, आपको बेहतर उपयोग करना चाहिए:
" " + parameter if parameter else ""
दिए गए अभिव्यक्ति के बजाय। if-else
अभिव्यक्ति के पीछे प्रेरणा के लिए PEP 308 - Conditional Expression देखें।
यह जांचता है कि parameter
का मूल्य है या नहीं। यदि यह करता है तो यह एक जगह तैयार करता है। यदि नहीं, तो यह एक खाली स्ट्रिंग देता है।
$ python
Python 2.7.2 (default, Oct 11 2012, 20:14:37)
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> foo = 'bar'
>>> foo and (" " + foo) or ""
' bar'
सही है, लेकिन आप यह बताना चाहते हैं कि यह कैसे काम करता है। –
पायथन में खाली स्ट्रिंग False
बूलियन मान के बराबर है, वैसे ही खाली सूची के समान।आपके द्वारा प्रस्तुत की गई रेखा एक टर्नरी ऑपरेटर का पायथन संस्करण है (जैसा कि नीचे टिप्पणी में उल्लेख किया गया है, आजकल एक अप्रचलित निर्माण, पायथन now has a real ternary operator के रूप में)। यह तीन नियमों पर आधारित है:
a and b
के लिए
a
है False
तो b
मूल्यांकन नहीं किया जाएगाa or b
के लिए
a
True
तो b
मूल्यांकन नहीं किया जाएगायदि parameter
का मूल्यांकन करता हैखंड का दूसरा भाग मूल्यांकन किया जाएगा: (" " + parameter)
। तो यह parameter
पर अग्रणी स्थान जोड़ देगा यदि यह खाली स्ट्रिंग नहीं है। or
खंड का दूसरा भाग मूल्यांकन नहीं किया जाएगा, क्योंकि आप पहले से ही पूरी अभिव्यक्ति को बता सकते हैं True
(True
या कुछ भी हमेशा True
है)।
तो parameter
False
(इस प्रसंग में रिक्त स्ट्रिंग) and
खंड के दूसरे भाग, का मूल्यांकन नहीं किया जाएगा के रूप में आप पहले से ही बता सकते हैं यह किया जा रहा है False
(False
और कुछ भी हमेशा False
है)। इसलिए or
खंड का दूसरा भाग एक खाली स्ट्रिंग लौटने का मूल्यांकन किया जाता है।
आप एक और अधिक वर्बोज़ तरीके से लिख सकते हैं:
if parameter:
return " " + parameter
else:
return ""
इस टीटीएल पर विचार करें। तो फिर यह सिर्फ विभिन्न परिदृश्यों में प्लग लगाने को देखने के लिए कि क्या होता है :)
ध्यान दें कि and
और or
पहले मूल्य कि उन्हें "सफल होने" या "असफल" का मूल्यांकन - और इस जरूरत को सही है या गलत नहीं हो!
a b a or b a and b
-- -- ------ -------
T T a (T) b (T)
T F a (T) b (F)
F T b (T) a (F)
F F b (F) a (F)
टी और एफ "सत्य-वाई" और "झूठी-वाई" मानों का प्रतिनिधित्व करते हैं। यह अभिव्यक्ति-चेनिंग काम करता है क्योंकि ऑपरेटरों को सही या गलत वापस नहीं करने की आवश्यकता होती है - यह या तो a
या b
का मान होगा।
पायथन खाली "स्ट्रिंग" के बूलियन मान के रूप में "झूठी" और गैर-खाली तारों के बूलियन मान के रूप में खाली तारों को मानता है।
तो अभिव्यक्ति के केवल दो संभावित परिणाम हैं, यानी खाली स्ट्रिंग और गैर-खाली स्ट्रिंग के लिए।
नोटिस करने की दूसरी बात यह है कि "या" और "और" ऑपरेटर का कौन सा मान वापस आ गया है। पायथन स्ट्रिंग और/और ऑपरेटर के लिए सिर्फ सही या गलत मान नहीं लौटाता है, यह तारों में से एक लौटाता है (मानते हैं कि उनके पास सत्य या गलत का मूल्य है)। पाइथन आलसी दृष्टिकोण का उपयोग करता है:
"और" ऑपरेटर के लिए यदि बाएं मान सही है, तो सही मान चेक किया गया है और लौटाया गया है। यदि बायां मान गलत है, तो यह
"या" ऑपरेटर के लिए यदि पहला मान सत्य है, तो यह वापस कर दिया जाता है।अन्यथा यदि दूसरा मान गलत है, तो दूसरा मूल्य
parameter = 'test'
print(parameter and (" " + parameter) or "")
दिया जाता है ouput: परीक्षण
parameter = ''
print(parameter and (" " + parameter) or "")
उत्पादन: (रिक्त स्ट्रिंग)
सब अच्छा जवाब के साथ, मैंने पाया इन बयानों में मदद मुझे यह बेहतर याद है और फिट है कि मेरा दिमाग कैसे काम करता है (और उम्मीद है कि वहां कुछ और के लिए):
"और" पहली झूठी वस्तु (उदा।, कोई नहीं, "", [],(), {}, 0) या अंतिम आइटम यदि कोई नहीं (उदा। कोई झूठी मिली)
"या" पहले यह सच है आइटम या अंतिम आइटम (जैसे कोई सच पाया)
सारांश में वे सब पहले आइटम है कि बयान के परिणाम का फैसला वापस जाने देता है। (सबसे खराब स्थिति में, अनुक्रम में अंतिम आइटम)
नोट इस नियम भी लागू होता है एक श्रृंखलित सभी "और" या सभी "या" बयान
यह '" "+ पैरामीटर यदि किसी और पैरामीटर" "' अतिरिक्त अस्पष्टता के साथ। – zch
@ Smac89: यह समझ में आता है, लेकिन ऐसा मैं लोग इस अस्पष्ट विचार पर विचार करेंगे। –