Bir değişkenin tamsayı olup olmadığını nasıl kontrol edebilirim?
Bunu yapmanız gerekiyorsa, şunları yapın
isinstance(<var>, int)
Python 2.x kullanmıyorsanız, bu durumda
isinstance(<var>, (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ğer
intalt sınıfını kullanırsanız, yeni sınıfınız bir
intolarak kaydedilmelidir, ki
type` 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.
Yine de klasik Python zihniyeti, af dilemenin izin istemekten daha kolay olduğudur. Başka bir deyişle, x
in 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.
>>> 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.
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 'int'>
>>> type(i) is int
True