2010-02-06 16 views

उत्तर

71

None पाइथन 2 में किसी भी डेटाटाइप से हमेशा कम होता है (object.c देखें)।

पायथन 3 में, यह बदला गया था; अब TypeError में एक समझदार प्राकृतिक क्रम के परिणाम के बिना चीजों पर तुलना करना। से 3.0 "what's new" updates:

अजगर 3.0 आदेश देने तुलना के लिए नियमों को सरल बनाया गया है:

आदेश तुलना ऑपरेटरों (<, <=, >=, >) एक TypeError अपवाद ऑपरेंड की जरूरत नहीं है जब बढ़ा एक सार्थक प्राकृतिक आदेश। इस प्रकार, अभिव्यक्ति जैसे: 1 < '', 0 > None या len <= len अब मान्य नहीं हैं, और उदा। None < NoneFalse लौटने के बजाय TypeError बढ़ाता है। एक अनुशासनिक यह है कि एक विषम सूची को सॉर्ट करना अब समझ में नहीं आता है - सभी तत्व एक दूसरे के साथ तुलनीय होना चाहिए। ध्यान दें कि यह == और != ऑपरेटरों पर लागू नहीं होता है: विभिन्न अतुलनीय प्रकारों की वस्तुएं हमेशा एक-दूसरे के साथ असमान की तुलना करती हैं।

यह कुछ लोगों को परेशान है, क्योंकि यह प्रकार एक सूची है कि इसमें कुछ None मूल्यों था तरह बातें करते हैं, और None मूल्यों शुरुआत या अंत में एक समूह प्रदर्शित किया जाना भी अक्सर काम था। There was a thread on the mailing list about this थोड़ी देर पहले, लेकिन अंतिम बिंदु यह है कि पायथन 3 ऑर्डर करने के बारे में मनमाने ढंग से निर्णय लेने से बचने की कोशिश करता है (जो कि पाइथन 2 में बहुत कुछ हुआ)।

+1

पायथन 3 की स्थिति को स्पष्ट करने के लिए धन्यवाद 3. मुझे "नया क्या है" पृष्ठ पढ़ना याद है लेकिन मुझे यह याद नहीं है। बहुत रोचक, लेकिन यह वास्तव में समझ में आता है ... –

+2

बेशक, कोई भी आदेश देने के बारे में मनमाने ढंग से कुछ भी नहीं है, जब तक कि यह स्पष्ट रूप से परिभाषित किया गया हो। इस तरह की अनावश्यक असंगतता यही है कि पाइथन 3 गोद लेने में इतनी देर लग रही है। –

+12

"अच्छी तरह परिभाषित" (व्यवहार की स्पष्ट, स्पष्ट परिभाषा) "मनमाने ढंग से" (विवेक के आधार पर बनाई गई पसंद) से अलग है। उदाहरण के लिए, कोई भी आसानी से कह सकता है "कोई भी सब कुछ से अधिक तुलना नहीं करता है"। यह समान रूप से अच्छी तरह से परिभाषित है, लेकिन अभी भी काफी मनमाना है। –

27

अजगर 2.7.5 स्रोत (object.c) से:

static int 
default_3way_compare(PyObject *v, PyObject *w) 
{ 
    ... 
    /* None is smaller than anything */ 
    if (v == Py_None) 
      return -1; 
    if (w == Py_None) 
      return 1; 
    ... 
} 

संपादित: जोड़ा गया संस्करण संख्या।

+1

यह पायथन 2.x के लिए है मुझे लगता है? – MatrixFrog

+0

लिंक 2.6 –

+0

है धन्यवाद, यह एक बहुत ही स्पष्ट उत्तर है! –

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