2010-06-10 1 views
7

पायथन के डिजाइन दर्शन के विचारों में से एक है "ऐसा करने के लिए एक स्पष्ट तरीका होना चाहिए।" (PEP 20), लेकिन यह हमेशा सच नहीं हो सकता है। बूलियन मूल्यांकन बनाम बयान अगर मैं विशेष रूप से (सरल) का जिक्र कर रहा हूं। पर विचार करें निम्नलिखित:पायथन शैली: यदि बयान बनाम बूलियन मूल्यांकन

if words: 
    self.words = words 
else: 
    self.words = {} 

बनाम

self.words = words or {} 
इस तरह के एक सरल स्थिति है, जो बेहतर है के साथ

, शैलीगत बोल? अधिक जटिल स्थितियों के साथ कोई पठनीयता के लिए अगर कथन का चयन करेगा, है ना?

+0

प्रैक्टिकलिटी शुद्धता को धड़कता है। –

+0

निश्चित रूप से या :) –

उत्तर

9

"वहां होना चाहिए केवल एक ही" पूरी तरह से हमेशा सच हो सकता है; लक्ष्य, एक लक्ष्य, हमेशा नहीं, यह तक पहुँचने (जैसे, संख्या a और b के लिए मना तो b + a या a + b होगा की संभावना का तात्पर्य "चाहिए" - यह सकारात्मक दावा है कि नहीं किया जा सकता "वहाँ एक ही है" है इतना बेतुका है कि इस मामले में समझदारी से "केवल एक ही रास्ता" नहीं हो सकता है)।

आपके उदाहरण में, मैं सहमत हूं कि or पर्याप्त साधारण मामलों में बेहतर है (एक स्पष्ट और पठनीय रेखा में किया जा सकता है जो करने के लिए चार पंक्तियां लंबवत स्थान का अपशिष्ट है) लेकिन किसी भी महत्वपूर्ण की भविष्यवाणी के लिए नहीं जटिलता। निर्णय लेना कि "महत्वपूर्ण जटिलता" क्या है, बेशक, एक निर्णय कॉल।

0

(संपादित)
अच्छी तरह से नीचे तरह के मामले में, मैं सशर्त अभिव्यक्ति

def somesuch(self, words=None): 
    self.words = words or {} 
    ... 
निश्चित रूप से

के लिए वोट, अगर आपको लगता है कि पठनीयता में सुधार चाहते हैं (आप इसे जोर से कि जिस तरह से पढ़ सकते हैं?) , आप

self.words = words if words else {} 
+0

आप सही हैं! वास्तव में, यह पूरा प्रश्न कक्षा परिभाषा के साथ ऐसा करने की कोशिश करके प्रेरित था और मेरे सभी उदाहरणों को खोजने के लिए एक ही शब्दकोश विशेषता साझा की गई थी। –

+1

-1: आप शायद ऐसा नहीं करना चाहते हैं (कम से कम सामान्य में नहीं) - परिवर्तनीय डिफ़ॉल्ट तर्क आपको आश्चर्यचकित कर सकते हैं। उदाहरण के लिए http://stackoverflow.com/questions/1132941/ देखें। –

+0

@ स्कॉट ग्रिफिथ्स: उह, क्षमा करें। मैंने अभी तक इसका सामना नहीं किया है, मुझे लगता है क्योंकि मैंने इसके बारे में नहीं सोचा था। यूआरएल के लिए धन्यवाद। तो ** पायथन में ** कोई परिवर्तनीय डिफ़ॉल्ट तर्क ** नहीं।-1 रखें, आशा है कि मुझे पाठ को याद रखने में मदद मिलेगी –

2

इस मामले में मैं कहूंगा कि "स्पष्ट से स्पष्ट स्पष्ट है"।

जब कोई आपका कोड पढ़ता है, तो वे कुछ मान्यताओं को बना सकते हैं। वे मान सकते हैं कि "शब्द" या तो खाली खाली हो सकता है या इसमें डेटा वाला एक (किसी के मामले में अनुपस्थित हो सकता है) उस स्थिति में, वे आपके कोड को अनुकूलित करने के लिए लुभाने वाले हो सकते हैं। वे इसे करने का भी अधिकार हो सकते हैं, अगर यह कहीं भी नहीं कहा गया है कि आप कोई भी मूल्य प्राप्त नहीं कर सकते हैं।

self.words = words 
if words is None: 
    self.words = {} 

या संभवतः एक "और" के बदले बिना शर्त काम पहले:

हैं "शब्दों" वास्तव में कोई नहीं हो सकता है, मुझे लगता है कि साथ के बारे में स्पष्ट होने की कोशिश होगी। किसी भी मामले में, इस तरह आप दस्तावेज को इस तरह से हल करते हैं कि कोई भी "शब्द" के लिए अपेक्षित मूल्य नहीं है।