2012-01-05 25 views
17

में "या" के साथ असाइनमेंट क्या इसे इस तरह के चर के मानों को असाइन करने के लिए खराब शैली माना जाता है?पाइथन

x = "foobar" or None 
y = some_variable or None 

उपर्युक्त उदाहरण में, x को 'foobar' मान मिलता है।

+0

मुझे कोई फ़ंक्शन नहीं दिख रहा है जिसे केवल सत्य परीक्षण कहा जाता है। साइड इफेक्ट्स कहां हैं? – jcollado

+3

ऐसा नहीं है कि "साइड इफेक्ट" क्या है। –

+0

@jcollado: मैं एक्स और वाई के लिए एक बूलियन असाइन नहीं कर रहा हूं। असाइन किया गया मान पहला शॉर्ट सर्किट आइटम है जो सत्य है। पहला मामला "foobar" है, और बाद वाला कुछ_वर्तनीय के बुलियन मूल्य पर निर्भर करता है। – TheOne

उत्तर

13

नहीं, यह एक आम प्रथा है। इसे अभिव्यक्तियों के लिए केवल खराब शैली माना जाता है जो आपके से काफी लंबा है।

+1

यह जावास्क्रिप्ट में एक विरोधी पैटर्न माना जाता है। यह स्वाभाविक रूप से अनियमित करने के लिए नहीं पढ़ता है और आप झूठी मान असाइन नहीं कर सकते हैं। – diginoise

3

मुझे इस तरह के अभिव्यक्तियों का उपयोग करके थोड़ा असहज महसूस होता है। सीखने में पाइथन 4ed इसे "कुछ असामान्य व्यवहार" कहा जाता है। बाद में मार्क लुट्ज़ का कहना है:

... यह पता चला है पायथन में एक बहुत ही आम कोडिंग प्रतिमान होने के लिए: के लिए, बस स्ट्रिंग एक निश्चित-आकार सेट के बीच में से एक अरिक्त वस्तु का चयन उन्हें एक साथ एक या में अभिव्यक्ति। सरल रूप में, यह भी आमतौर पर एक डिफ़ॉल्ट निर्माण में किया जाता है ...

वास्तव में, वे संक्षिप्त एक पंक्ति का भाव है कि कोड से लाइन शोर को खत्म करने में मदद का उत्पादन।
यह व्यवहार करता है, तो/बाकी त्रिगुट ऑपरेटर का एक रूप का आधार है:

A = Y if X else Z 
+0

लेकिन यह एक लंबे पैरामीटर दोहराने का कारण हो सकता है जहां 'वाई = एक्स'। उदाहरण के लिए: 'ए = my_main_dictionary.my_sub_dictionary.my_value अगर my_main_dictionary.my_sub_dictionary.my_value else कोई नहीं' या 'ए = my_main_dictionary.my_sub_dictionary.my_value या कोई नहीं' –

9

कुछ इस तरह कर रही है के प्राथमिक खतरे की संभावना है कि (दूसरे मामले में) some_variable झूठी है, लेकिन नहीं कोई नहीं (है उदाहरण के लिए पूर्णांक 0) और आप उस मामले में y के साथ समाप्त नहीं करना चाहते हैं।