क्या पायथन में एक लाइन पर ऐसा करना संभव है?
if <condition>:
myList.append('myString')
मैंने टर्नरी ऑपरेटर की कोशिश की है:
myList.append('myString' if <condition>)
लेकिन मेरी IDE ( MyEclipse ) को यह पसंद नहीं था, बिना else।
क्या पायथन में एक लाइन पर ऐसा करना संभव है?
if <condition>:
myList.append('myString')
मैंने टर्नरी ऑपरेटर की कोशिश की है:
myList.append('myString' if <condition>)
लेकिन मेरी IDE ( MyEclipse ) को यह पसंद नहीं था, बिना else।
जवाबों:
हां, आप यह कर सकते हैं:
<condition> and myList.append('myString')
अगर <condition>गलत है, तो शॉर्ट-सर्किटिंग में किक होगी और राइट-हैंड साइड का मूल्यांकन नहीं किया जाएगा। यदि <condition>सत्य है, तो दाहिने हाथ की ओर का मूल्यांकन किया जाएगा और तत्व को जोड़ दिया जाएगा।
मैं सिर्फ इतना बताऊंगा कि ऊपर करना काफी गैर-व्यर्थ है, और यह संभवत: यह लिखना सबसे अच्छा होगा, चाहे:
if <condition>: myList.append('myString')
प्रदर्शन:
>>> myList = []
>>> False and myList.append('myString')
False
>>> myList
[]
>>> True and myList.append('myString')
>>> myList
['myString']
E701 multiple statements on one lineइसलिए नॉन- पाइथोनिक ...;)
x = object.get('attribute')उस स्थिति में होगा
कारण भाषा आपको वाक्यविन्यास का उपयोग करने की अनुमति नहीं देता है
variable = "something" if a_condition
इसके बिना else, उस मामले में a_condition == False, जहां variableअचानक अज्ञात है। हो सकता है कि यह तयशुदा हो None, लेकिन अजगर को आवश्यकता है कि सभी चर असाइनमेंट वास्तव में स्पष्ट असाइनमेंट में परिणत हों। यह आपके फ़ंक्शन कॉल जैसे मामलों पर भी लागू होता है, क्योंकि फ़ंक्शन को दिए गए मान का मूल्यांकन उसी तरह किया जाता है जैसे असाइनमेंट स्टेटमेंट का आरएचएस होगा।
इसी तरह, सभी returnको वास्तव में लौटना चाहिए, भले ही वे सशर्त returnएस हों। उदाहरण के लिए:
return variable if a_condition
अनुमति नहीं है, लेकिन
return variable if a_condition else None
की अनुमति दी जाती है, क्योंकि दूसरा उदाहरण स्पष्ट रूप से कुछ वापस करने की गारंटी है।
variable=Noneकानूनी रूप से पूरी तरह से कानूनी न हो। : डी
continue if i == 0एक लूप में।
else pass?
else passकाम नहीं करता क्योंकि टर्नरी अभिव्यक्ति को एक मूल्य वापस करना चाहिए जिसे पारित किया जा सकता है return। passएक वैध returnमूल्य नहीं है ।
if a_condition: variable = "something"और if a_condition: return variableकानूनी है। तो यह अनिवार्य रूप से अजगर का एक मनमाना वाक्यविन्यास विकल्प है।
if <condition>: myList.append('myString')
नहीं तो नहीं। इसे एक पंक्ति में रखने की आवश्यकता क्यों है?
ध्यान दें कि "टर्नरी ऑपरेटर" एक ऑपरेटर है । किसी भी ऑपरेटर की तरह, इसे कुछ वापस करना होगा , इसलिए आप बिना टर्नरी ऑपरेटर के elseखंड के बिना कैसे हो सकते हैं ? यदि स्थिति सत्य जैसी नहीं है तो इसे क्या माना जाता है?
आप मूल रूप से do_thing() if <condition> else passनिर्माण के लिए पूछ रहे हैं (जो फेंक दिया जाएगा SyntaxError, अगर भाग गया)। जैसा कि मैंने अनुसंधान के दौरान (कुछ हद तक) इसी तरह के प्रश्न do_thing() if condition else None के करीब पाया है जैसा कि आप प्राप्त कर सकते हैं (जो कि अभी करने का एक और तरीका है <condition> and do_thing())। इसलिए, इस विचार और अन्य उत्तरों को संक्षेप में प्रस्तुत करने के लिए, यहाँ आपके विकल्प हैं:
if <condition>: myList.append('myString') - कम से कम 'हैकी' (और इस तरह से पसंदीदा) तरीका लगता है<condition> and myList.append('myString')myList.append('myString') if <condition> else NonemyList.extend(['myString'] if condition else []) यह भी काम करेगा, हालांकि यह अन्य समाधानों की तुलना में अधिक काम है।
आप ऐसा कुछ कर सकते हैं:
myList.append('myString') if <condition> else False
या
myList.append('myString') if <condition> else 0
myList.append('myString') if True else _लेकिन अगर आप कुछ भी नहीं बता रहे हैं, तो कोई बात नहीं। मैं इस व्यक्ति के बारे में चिंतित हूँ, हालांकि वह समान तर्क के साथ सूची-बोध का प्रयास कर रहा है।
अगर मैं एक शर्त के आधार पर एक सूची में वैकल्पिक तत्वों को जोड़ना चाहता हूँ तो मैं यह करूँगा।
nums = [
1,
2,
3 if <condition> else None,
4,
]
nums = [i for i in nums if i is not None]
यह सिर्फ किसी के साथ मूल्य को प्रतिस्थापित करता है यदि शर्त पूरी नहीं होती है और फिर बाद में, यह बिना किसी मूल्य के सूची को फिर से परिभाषित करता है। यदि वे शर्त पूरी करते हैं तो इस तरह वे अपने सूचकांक को संरक्षित करते हैं