NameError: Python में 'कमी' नाम परिभाषित नहीं है


187

मैं पायथन 3.2 का उपयोग कर रहा हूं। इस की कोशिश की:

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

और निम्नलिखित त्रुटि मिली:

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

reduceइंटरैक्टिव कंसोल में मुद्रण की कोशिश की - यह त्रुटि मिली:

NameError: name 'reduce' is not defined


क्या reduceवास्तव में पायथन 3.2 में हटा दिया गया है? अगर ऐसा है, तो विकल्प क्या है?


3
@ जेर्नार्डो, सही उपकरण क्या है?
सेर्गेई

जवाबों:


280

इसे स्थानांतरित कर दिया गया functools



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

195

आप जोड़ सकते हो

from functools import reduce

इससे पहले कि आप कम का उपयोग करें।


3
पिछले उपयोगकर्ता ने पहले ही सवाल का जवाब दे दिया है और उत्तर उसके उत्तर के समान है
काथिरावन नटराजन

8

या यदि आप छह पुस्तकालय का उपयोग करते हैं

from six.moves import reduce

3

इस मामले में मेरा मानना ​​है कि निम्नलिखित समतुल्य है:

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

इसके साथ एकमात्र समस्या यह है कि यह बड़ी संख्या बनाता है, लेकिन हो सकता है कि बार-बार मॉडुलो संचालन से बेहतर हो?


बार-बार न्यूनाधिक संचालन उपयोगी होते हैं जब यह संख्याओं को छोटा रखने में मदद करता है। जब तक आप A LOT नंबर की संख्या नहीं देंगे, तब तक बड़ी संख्याएँ नहीं बनाई जाएंगी, इसलिए इस मामले में यह मदद नहीं करेगा। विशेष रूप से ऐसा नहीं करने के बाद से बिल्ट-इन सम फ़ंक्शन के उपयोग की अनुमति मिलती है, जो उपयोगकर्ता द्वारा परिभाषित फ़ंक्शन के दोहराए गए अनुप्रयोग की तुलना में बहुत तेज़ी से चलेगा
HackerBoss 3
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.