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

  • CorridorDigital

    CorridorDigi

    17 Mayıs 2010
  • CrazyMan

    CrazyMan

    14 Mayıs 2008
  • Paul Schroder

    Paul Schrode

    30 Kasım 2007