Gönderen piton 2 kılavuzun :
CPython uygulama ayrıntıları: Sayılar dışında farklı türdeki nesneler tür adlarına göre sıralanır; uygun karşılaştırmayı desteklemeyen aynı türdeki nesneler adreslerine göre sıralanır.
İki dize veya iki sayısal tür sipariş ettiğinizde, sıralama beklenen şekilde yapılır (dize için sözlükbilimsel sıralama, tamsayılar için sayısal sıralama).
Sayısal ve sayısal olmayan bir tür sipariş ettiğinizde, önce sayısal tür gelir.
>>> 5 < 'foo'
True
>>> 5 < (1, 2)
True
>>> 5 < {}
True
>>> 5 < [1, 2]
True
Hiçbiri sayısal olmayan iki uyumsuz tür sipariş ettiğinizde, bunlar türlerinin adlarının alfabetik sırasına göre sıralanır:
>>> [1, 2] > 'foo' # 'list' < 'str'
False
>>> (1, 2) > 'foo' # 'tuple' > 'str'
True
>>> class Foo(object): pass
>>> class Bar(object): pass
>>> Bar() < Foo()
True
Bir istisna, her zaman yeni stil sınıflarından önce gelen eski stil sınıflarıdır.
>>> class Foo: pass # old-style
>>> class Bar(object): pass # new-style
>>> Bar() < Foo()
False
Bu davranış dil spekülasyonu tarafından zorunlu kılınıyor mu yoksa uygulayıcılara mı bağlı?
Orada hiçbir dil belirtimi . Dil referans diyor ki:
Aksi takdirde, farklı türdeki nesneler her zaman eşitsizdir ve tutarlı ama keyfi olarak sıralanır.
Yani bir uygulama detayı.
Önemli Python uygulamaları arasında herhangi bir fark var mı?
Buna cevap veremem çünkü sadece resmi CPython uygulamasını kullandım, ancak Python'un PyPy gibi başka uygulamaları da var.
Python dilinin sürümleri arasında farklar var mı?
Python 3.x'te, bir tamsayı ve bir dize sipariş etmeye çalıştığınızda bir hata oluşacak şekilde davranış değiştirildi:
>>> '10' > 5
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
'10' > 5
TypeError: unorderable types: str() > int()