2011-12-31 16 views
85

में नाम 'कम' परिभाषित नहीं किया गया है, मैं पायथन 3.2 का उपयोग कर रहा हूं। कोशिश यह:नाम त्रुटि: पायथन

xor = lambda x,y: (x+y)%2 
l = reduce(xor, [1,2,3,4]) 

और मिल गया निम्न त्रुटि: -:

NameError: name 'reduce' is not defined 


reduce वास्तव में अजगर 3.2 में निकाल दिया जाता है

l = reduce(xor, [1,2,3,4]) 
NameError: name 'reduce' is not defined 

इंटरैक्टिव कंसोल में मुद्रण reduce की कोशिश की यह त्रुटि आई ? यदि ऐसा है, तो विकल्प क्या है?

+3

@JBernardo उपयोग करते हैं, सही उपकरण क्या है? – Sergey

उत्तर

139

इसे functools पर ले जाया गया था।

+25

nooooooo! वास्तव में? क्यूं कर? – juliomalegria

+25

@ julio.alegria: क्योंकि [Guido इसे नफरत करता है] (http://www.artima.com/weblogs/viewpost.jsp?thread=98196)। –

+2

@ IgnacioVazquez-Abrams में संदर्भित लेख कुछ वाकई अच्छे अंक बनाता है कि अधिकतर मामलों को अधिक पठनीय फैशन में कैसे लिखा जा सकता है। मेरे लिए, यह list_of_dicts में आइटम के लिए 'sum (item ['key'] लिखकर है)'। – connorbode

1

इस मामले में मुझे विश्वास है कि निम्नलिखित बराबर है:

l = sum([1,2,3,4]) % 2 

इस के साथ ही समस्या यह है कि बड़ी संख्या बनाता है, लेकिन हो सकता है कि बार-बार सापेक्ष आपरेशन की तुलना में बेहतर है?

+0

यह निश्चित रूप से काफी अधिक कुशल है ... – naught101

+0

हाँ ... एन = 10000 के लिए 20 से अधिक के कारक द्वारा ... – naught101

70

आप

from functools import reduce 

जोड़ने से पहले आप को कम कर सकते हैं।

+0

पिछले उपयोगकर्ता ने पहले से ही प्रश्न का उत्तर दिया है और उत्तर उसके उत्तर के समान है –

1

या यदि आप छह पुस्तकालय

from six.moves import reduce 
संबंधित मुद्दे