तो अब कम हो()। यह वास्तव में वह है जिसे मैंने हमेशा से नफरत की है, क्योंकि, + या * से जुड़े कुछ उदाहरणों के अलावा, लगभग हर बार जब मैं एक गैर-मामूली फ़ंक्शन तर्क के साथ कम() कॉल करता हूं, तो मुझे पेन और पेपर को पकड़ना होगा आरेख वास्तव में उस कार्य में खिलाया जा रहा है इससे पहले कि मैं समझता हूं कि कम() को क्या करना है। तो मेरे दिमाग में, कम करने की प्रयोज्यता() को सहयोगी ऑपरेटरों तक काफी सीमित है, और अन्य सभी मामलों में संचय लूप को स्पष्ट रूप से लिखना बेहतर होता है।
त्वरित, क्या निम्नलिखित कोड कर रहा है:
Functional Programming HOWTO लेख में एक भ्रामक reduce
का एक उत्कृष्ट उदाहरण है?
total = reduce(lambda a, b: (0, a[1] + b[1]), items)[1]
आप यह पता लगा सकते हैं, लेकिन यह अभिव्यक्ति सुलझाना यह पता लगाने की क्या हो रहा है समय लगता है। एक छोटी नेस्टेड डीईएफ़ बयानों का उपयोग करते हुए बातें एक छोटा सा बेहतर बनाता है:
def combine (a, b):
return 0, a[1] + b[1]
total = reduce(combine, items)[1]
लेकिन अगर मैं बस पाश के लिए एक का इस्तेमाल किया था यह सब का सबसे अच्छा होगा:
total = 0
for a, b in items:
total += b
या योग() अंतर्निहित में और एक जनरेटर अभिव्यक्ति: जब छोरों के लिए के रूप में लिखा
total = sum(b for a,b in items)
को कम से कई का उपयोग करता है() साफ कर रहे हैं।
उस स्थिति में यह और भी आसान हो सकता है: योग (बी के लिए बी, वस्तुओं में बी) –
@ जॉन मिलिकिन: अच्छा! :-) – DzinX
आह, डरावना - अब जब मैं लिंक में देखता हूं, तो योग() लाइन सीधे आपके उद्धरण है। इसे पहली बार याद किया होगा। –