可以看到,字符串為空的時候也比數字類型大,這是因為python2.7中按照如下規則進行比較:
1、任何兩個對象都可以比較。
2、相同類型的對象(實例),如果是數字型(int/float/long/complex),則按照簡單的大小來比較;如果是非數字型,且類(型)中定義了__cmp__(含__gt__,__lt__等)則按照__cmp__來比較,否則按照地址(id)來比較
3、不同類型的對象(實例),如果其中一個比較對象是數字型(int/float/long/complex等),則數字型的對象<其它非數字型的對象;
並且如果兩個都是非數字型的對象,則按照類型名的順序比較, tuple () > str > list [ ] > dict {} > number。
4、對於自定義的類(型)實例,如果繼承自基本類型,則按照基本類型的規則比較(1-3)。否則,old-style class < new-style class, new-style class之間按照類型名順序比較,old-style class之間按照地址進行比較
5、bool類型是int的子類,且True=1, False=0,比較時按照1-4來比較,如True > -1, True < 4.2, True < "abc"等
所以2.7如果沒注意類型的話可能踩坑:‘3’ > 300 // true
python 3.X 不支持str和數字類型對比,會報異常