Bir değişkenin tamsayı olup olmadığını kontrol etme

Bir değişkenin tamsayı olup olmadığını nasıl kontrol edebilirim?

Çözüm

Bunu yapmanız gerekiyorsa, şunları yapın

isinstance(, int)

Python 2.x kullanmıyorsanız, bu durumda

isinstance(, (int, long))

typekullanmayın. Python'da neredeyse hiçbir zaman doğru cevap değildir, çünkü polimorfizmin tüm esnekliğini engeller. Örneğin, eğerintalt sınıfını kullanırsanız, yeni sınıfınız birintolarak kaydedilmelidir, kitype` bunu yapmayacaktır:

class Spam(int): pass
x = Spam(0)
type(x) == int # False
isinstance(x, int) # True

Bu Python'un güçlü polimorfizmine uygundur: bir int gibi davranan herhangi bir nesneye izin vermelisiniz, bunun yerine bir int olmasını zorunlu kılmalısınız.

BUT

Yine de klasik Python zihniyeti, af dilemenin izin istemekten daha kolay olduğudur. Başka bir deyişle, xin bir tamsayı olup olmadığını kontrol etmeyin; olduğunu varsayın ve değilse istisna sonuçlarını yakalayın:

try:
    x += 1
except TypeError:
    ...

Bu zihniyet, nesnenizin özel olarak oluşturulmuş bir sınıftan miras almasını sağlayarak tam olarak hangi özelliklere sahip olması gerektiğini (toplama? çarpma? ikiye katlama?) kaydetmenize olanak tanıyan soyut temel sınıfların kullanımıyla yavaş yavaş aşılmaktadır. Bu en iyi çözüm olacaktır, çünkü tam olarak gerekli ve yeterli niteliklere sahip nesnelere izin verecektir, ancak nasıl kullanılacağına ilişkin belgeleri okumanız gerekecektir.

Yorumlar (14)
>>> isinstance(3, int)
True

Daha fazlası için buraya bakınız.

Eğer int benzeri nitelikler arıyorsanız bunun yardımcı olmayacağını unutmayın. Bu durumda long için de kontrol etmek isteyebilirsiniz:

>>> isinstance(3L, (long, int))
True

Python kaynağında bir dizi/indeks türüne karşı bu tür kontroller gördüm, ancak bunun C dışında görünür olduğunu sanmıyorum.

Token SO yanıtı: Türünü kontrol etmeniz gerektiğinden emin misiniz? Ya işleyemeyeceğiniz bir türü geçirmeyin ya da potansiyel kod yeniden kullanıcılarınızı alt etmeye çalışmayın, işlevinize bir int geçirmemek için iyi bir nedenleri olabilir.

Yorumlar (8)

Burada SO'nun kendisinde bir ilgili soru buldum.

Python geliştiricileri türleri kontrol etmeyi değil, türe özgü bir işlem yapmayı ve bir TypeError istisnası yakalamayı tercih ederler. Fakat eğer türü bilmiyorsanız o zaman aşağıdaki durumla karşılaşırsınız.

>>> i = 12345
>>> type(i)

>>> type(i) is int
True
Yorumlar (3)