2011-12-05 5 views
8

पाइथन में अंतर्निहित फ़ंक्शंस max और min के लिए दस्तावेज़ इंगित करता है कि key पैरामीटर को sort फ़ंक्शन में ऐसा करना चाहिए। , TypeError: 'NoneType' object is not callableपायथन के लिए डिफ़ॉल्ट कुंजी अधिकतम/मिनट फ़ंक्शंस

लेकिन अगर मैं sort समारोह के साथ कुछ ऐसा ही करते हैं, मैं उम्मीद परिणाम प्राप्त:

a = [1, 2, 3, 4] 
max(a, key=None) 

बहरहाल, यह एक त्रुटि को जन्म देती है: दूसरे शब्दों में, मैं यह करने के लिए सक्षम होना चाहिए:

a = [1, 2, 3, 4] 
a.sort(key=None) 

कोई त्रुटि उत्पन्न नहीं होती है और डिफ़ॉल्ट प्रकार का उपयोग किया जाता है। कई किताबें यह भी दर्शाती हैं कि मुझे max और min फ़ंक्शंस में एक ही व्यवहार से दूर होना चाहिए। Python in a Nutshell से यह अंश देखें।

क्या यह वास्तव में max और min फ़ंक्शंस का डिफ़ॉल्ट व्यवहार है? क्या यह होना चाहिए? क्या वे सॉर्ट फ़ंक्शन से मेल नहीं खाते हैं?

उत्तर

23

आपने भाषा के साथ .sort और max के कार्यान्वयन में एक अंतर को ठोकर दिया है।

list.sort() एक कीवर्ड तर्क "कुंजी" लेता है जो डिफ़ॉल्ट रूप से किसी के लिए होता है। इसका मतलब है कि सॉर्ट विधि key=None तर्क की आपूर्ति करने के बीच अंतर को नहीं बता सकती है या यह केवल डिफ़ॉल्ट मान ले रही है। किसी भी मामले में, यह व्यवहार करता है जैसे कोई महत्वपूर्ण कार्य प्रदान नहीं किया गया है।

max दूसरी तरफ एक कीवर्ड तर्क "कुंजी" की उपस्थिति की जांच कर रहा है। इसमें डिफ़ॉल्ट मान नहीं है और यदि इसका मूल्य मौजूद है तो इसका मान मुख्य कार्य के रूप में उपयोग किया जाता है।

किसी भी तरह से, कुंजी को किसी के रूप में कभी भी आपूर्ति नहीं की जानी चाहिए। यह एक ऐसा कार्य माना जाता है जिसका उपयोग सूची/आइटम में वस्तुओं से "कुंजी" मान निकालने के लिए किया जाता है। उदाहरण के लिए:

a = [("one", 1), ("two", 2), ("three", 3), ("four", 4)] 
a.sort(key=lambda item:item[1]) 
+0

प्रतिक्रिया के लिए धन्यवाद: बस जोड़ने, मामले में आप सोच रहे हैं, तो डिफ़ॉल्ट key मूल्य (sort में और max/min कार्यों में दोनों) की तरह कुछ है। मुझे पता था कि इन सुविधाओं का वास्तविक कार्यान्वयन अलग था, लेकिन मैं निराश था कि मुझे जो दस्तावेज मिल सकता था, वह इस अंतर को स्पष्ट नहीं करता था। –

+0

कोई समस्या नहीं है। यदि यह आपके प्रश्न का उत्तर देता है, तो इसे स्वीकार करने की हमेशा सराहना की जाती है। –

+1

"कुंजी" वास्तव में एक भयानक नाम है ... – OlivierBlanvillain

7

@ डेविड का जवाब सही है।

lambda x: x 
+1

लेकिन, किसी भी को डिफ़ॉल्ट मान के रूप में पास करने वाले हैंडल को सॉर्ट करें, जबकि न्यूनतम/अधिकतम नहीं है। तो, कुछ अलग-अलग लागू किया जा रहा है। यदि आप कोड को देखते हैं, तो न्यूनतम और अधिकतम फ़ंक्शन बस यह देखने के लिए जांच करता है कि क्या तर्क शब्दकोष में परिभाषित किया गया है या नहीं। मुझे विश्वास नहीं है कि अधिकतम/न्यूनतम कुंजी तर्क के लिए डिफ़ॉल्ट मान है, केवल डिफ़ॉल्ट व्यवहार। –

संबंधित मुद्दे