SORU
17 Temmuz 2010, CUMARTESİ


Nasıl Python string ve int farkı nedir?

Aşağıdaki kod çıktı (as seen on ideone.com) ile açıklamalı

print "100" < "2"      # True
print "5" > "9"        # False

print "100" < 2        # False
print 100 < "2"        # True

print 5 > "9"          # False
print "5" > 9          # True

Birisi çıktı gibi olduğunu açıklayabilir mi?


Uygulama ayrıntıları

  • Bu davranış, dil spec tarafından zorunlu ya da uygulayıcıları var mı?
  • Büyük Python uygulamaları arasında bir fark var mı?
  • Python dil sürümleri arasında bir fark var mı?

CEVAP
17 Temmuz 2010, CUMARTESİ


manual:

CPython uygulama ayrıntı: sayı yazın adlarına göre sıralanır dışında farklı Nesneleri, uygun karşılaştırma desteklemeyen aynı tür nesneleri kendi adresine göre sıralanır.

Sana iki dize ya da iki sayısal türleri sipariş ederken sipariş beklenen şekilde değiştirir string, sayısal için Sipariş tamsayılar için Sipariş) yapılır.

Sen bir sayısal düzen ve sayısal olmayan bir tür, sayısal türde her şeyden önce gelir.

>>> 5 < 'foo'
True
>>> 5 < (1, 2)
True
>>> 5 < {}
True
>>> 5 < [1, 2]
True

Sen de sayısal nerede iki uyumsuz tip sipariş ederken, onların typenames alfabetik sıraya göre sıralanmıştır:

>>> [1, 2] > 'foo'   # 'list' < 'str' 
False
>>> (1, 2) > 'foo'   # 'tuple' > 'str'
True

>>> class Foo(object): pass
>>> class Bar(object): pass
>>> Bar() < Foo()
True

Tek istisna her zaman yeni-stil sınıfları önce gelen tarzı eski sınıflar.

>>> class Foo: pass           # old-style
>>> class Bar(object): pass   # new-style
>>> Bar() < Foo()
False

  • Bu davranış, dil spec tarafından zorunlu ya da uygulayıcıları var mı?

no language specification var. language reference diyor ki:

Aksi takdirde, farklı nesneleri her zaman eşitsiz karşılaştırın ve sürekli ama keyfi olarak sıralanıyor.

Uygulama ayrıntı.

  • Büyük Python uygulamaları arasında bir fark var mı?

Sadece resmi CPython uygulaması kullandım, çünkü bu bir cevap veremem, ama PyPy gibi Python diğer uygulamaları vardır.

  • Python dil sürümleri arasında bir fark var mı?

Python 3'te.x davranışı bir tamsayı sipariş girişiminde şekilde değiştirildi ve bir dize bir hata yükseltmek

>>> '10' > 5
Traceback (most recent call last):
  File "", line 1, in 
    '10' > 5
TypeError: unorderable types: str() > int()

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ModNation Racers H.Q.

    ModNation Ra

    31 Ocak 2010
  • natescamp

    natescamp

    30 NİSAN 2009
  • NikkoNantone

    NikkoNantone

    21 Kasım 2011