2013-02-01 78 views
5

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

+0

"सही तरीका" किस संदर्भ को दिया गया? –

+0

एक उदाहरण एक आरईएसटी क्वेरी से परिणाम लौटाएगा। – espeed

उत्तर

7

मुझे लगता है कि खाली इटेटरेटर बेहतर है क्योंकि कुछ भी नहीं हो रहा है, तो पहले जांच कर रहा है कि वापस लौटाया गया मूल्य कोई नहीं है और फिर फिर से चालू हो या नहीं।

for x in function(): 
    do_something() 

value = function() 
if value is not None: 
    for x in value: 
     do_something() 

बस इसे देखें।

इसके अलावा आमतौर पर आप किसी के साथ इसके गुणों को प्रारंभ नहीं करते हैं, लेकिन खाली इटर ऑब्जेक्ट के साथ।

self.list_of_users = [] 

नहीं

self.list_of_users = None 
+0

_ "कुछ भी खत्म नहीं हो रहा है" _ '[उद्धरण-आवश्यक]'। हां, यह _terser है, _ लेकिन कुछ 'टाइमिट' परिणामों के बिना, मैं असुविधाजनक हूं कि यह _faster._ –

+0

आप इसे लिख सकते हैं: 'कुछ_फनक() या []: pass' या '[do_something (item) में आइटम के लिए कुछ_func() या []] 'में आइटम के लिए। – espeed

+0

इस मामले पर भी विचार करें जब फ़ंक्शन कोई परिणाम न मिलने पर आपको कुछ अलग करने की आवश्यकता होती है, तो आपको पहले इटरेटर के आकार की जांच करनी होगी। – espeed

5

एक सामान्य अभ्यास है कि मैं का पालन करने के लिए सिखाया गया है, इनपुट डोमेन के भीतर सभी मान्य मान के लिए एक ही डेटा प्रकार वापस जाने के लिए है, तो आप कर सकते हैं है। यह दूसरों के लिए आपके कोड का उपयोग करना आसान बनाता है, और आपका दस्तावेज़ क्लीनर होगा। मान्य इनपुट डोमेन के बाहर वाले मानों के लिए, अपवाद उठाएं।

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

+0

"रिक्त इटेटरेटर वापस न करें" शिविर में से एक कारण यह है कि यदि आपको खाली मामले के लिए कुछ करने की ज़रूरत है, तो आपको 'अगर लेन (परिणाम) के माध्यम से इटरेटर के आकार की जांच करनी होगी: 'और यह महंगा हो सकता है अगर इटरेटर बड़ा है, जबकि' यदि परिणाम कोई नहीं है: 'सस्ता है और इस प्रकार अधिक लचीला है। – espeed

+1

यदि एक्स एक पुनरावर्तक है, तो "अगर एक्स" गलत हो जाएगा यदि एक्स खाली है –