2012-05-17 11 views
12

के लिए 2.x वापसी मान docs से उद्धरित:अजगर सीएमपी

cmp(x, y)

दो वस्तुओं x और y की तुलना करें और परिणाम के अनुसार एक पूर्णांक लौट आते हैं। वापसी मान नकारात्मक है यदि x < y, x == y शून्य और शून्य x > y पर सख्ती से सकारात्मक है।

मैं इस धारणा है कि वापसी मान हमेशा -1, 0, और 1 हैं, लेकिन डॉक्स स्पष्ट रूप से कहना है कि नहीं है, केवल शून्य और सकारात्मक/नकारात्मक वापसी मान उल्लेख के तहत किया गया।

वहाँ रहे हैं किसी भी स्थितियों जब cmp(x,y) के रिटर्न मान -1, 0, या 1 नहीं है?

+7

स्वाभाविक रूप से यह ध्यान देने योग्य है कि 'cmp()' का उपयोग करने के लिए सलाह दी जाती है, क्योंकि यह पाइथन 3.x में चला जाता है। –

उत्तर

11

नहीं, दस्तावेज़ स्पष्ट रूप से कहते हैं कि yalues ​​कुछ भी हो सकता है। निर्दिष्ट वस्तुओं को बराबर मानते हैं तो निर्दिष्ट एकमात्र मान 0 है। तथ्य यह है कि आप केवल मूल्यों -1, 0 और 1 देखने पर विश्वास न करें, कि एक कार्यान्वयन विवरण दिया गया है और * को बदल सकता है, इसलिए हमेशा के लिए < और > 0.

* जाँच: नोट - वास्तव में, ऐसा नहीं होगा वास्तव में बदलने का मौका है, क्योंकि cmp pyhton3 में चला गया है। इसके बजाय rich comparison का उपयोग करें।

2

केवल 0, पर भरोसा किया जा सकता है, हालांकि list.sort के लिए docstring दिलचस्प है:

print list.sort.__doc__ 
L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*; 
cmp(x, y) -> -1, 0, 1 

लेकिन वास्तव में, प्रकार वास्तव में उस पर इस लागू नहीं करता तुलना समारोह के रूप में यहां देखा जा सकता:

def mycmp(a, b): 
    print "mycmp(): a - b = ", a - b 
    return a - b 

L = [50, 30, 20, 40, 70, 50] 

>>> L.sort(cmp=mycmp) 
mycmp(): a - b = -20 
mycmp(): a - b = -10 
mycmp(): a - b = 20 
mycmp(): a - b = 10 
mycmp(): a - b = -10 
mycmp(): a - b = 30 
mycmp(): a - b = 20 
mycmp(): a - b = 10 
mycmp(): a - b = -20 
mycmp(): a - b = 0 

>>> print L 
[20, 30, 40, 50, 50, 70] 

बस हित के लिए है, लेकिन स्पष्ट रूप से sort से -1, 0 अन्य मूल्यों, या +1 के साथ खुशी से काम कर रहा है, तो आप भी होना चाहिए!

+1

http://docs.python.org/library/functions.html#sorted कहता है कि सॉर्ट बिल्टिन cmp फ़ंक्शन स्वीकार करते हैं जो +, 0 या - परिणाम लौटा सकते हैं। –