Python'da da diğer dillerdeki temel veri tipleriyle birlikte kendine özgü bazı veri tipleri bulunur. Python'un en büyük avantajlarından biri öntanımlı veri tiplerinin kolayca programcı tarafından tanımlanacak sınıflar tarafından taklit edilebilmesidir. __getattr__ ve __str__ gibi özel metodların yaratılan sınıf tarafından taklit edilmesi ile tamamen isteğe göre hazırlanmış özel veri tipleri üretilip diğer tüm veri türleri gibi kullanılabilir. Örneğin bu sayede string, integer ve listenin çeşitli özelliklerine sahip sınıflar üretilebilir. Bu özel fonksiyonların tam listesi Python Dil Rehberi'nde2 bulunabilir
Boolean değerler
Python'un geniş veri tipi seçenekleri arasında en yeni olanı boolean değerlerdir. Python 2.2'ye kadar True ve False anahtar kelimeleri yoktur. 2.2'de ise 0 ve 1 sayılarına denk olarak bu kelimeler getirildikten sonra sonunda 2.3 sürümü ile Python gerçek bir boolean tipine kavuşmuştur. Boolean veri tipinin Python'da bu kadar geç ortaya çıkmasının sebebi Python'un C'ye benzer bir şekilde her türlü veri tipini doğruluk testinde kullanabiliyor olmasıdır. Örneğin boş bir string, boş bir liste veya 0 sayısı yanlış, 0 dışındaki herhangi bir sayı, boyutu 0'dan büyük olan herhangi bir liste veya string ise doğru kabul edilecektir. Bunun dışında __nonzero__ adlı fonksiyonu kendi sınıfımızın içerisinde tanımlayarak kendi yaratacağımız bir sınıfı da doğruluk testinde kullanmak mümkündür.
Sayısal Tipler
Python'da dört temel sayısal veri tipi bulunmaktadır. Bunlar integer (Tamsayı), long (Uzun tamsayı), float (Kayar noktalı sayı), complex (Karmaşık sayı) olarak adlandırılırlar. Bu veri tiplerinin tamamı işaretli sayılardır. Gerektiği durumlarda Python yorumlayıcısı integer, long ve float tipleri arasında otomatik değişimler yapabilmektedir. Örneğin Python yorumlayıcısına integer'ın sınırlarını aşan bir sayı verdiğiniz takdirde yorumlayıcı bunu otomatik olarak long tipine çevirecektir. Aynı şekilde bir işlemin operandlarından birinin float olması halinde sonuç ta float şeklinde dönecektir.
String Tipleri
Python'da unicode desteği sonradan eklendiğinden string ve unicode verileri ayrı veri tipleri olarak tanımlanmıştır. Unicode nesneleri temelde string tipleri ile aynı özellikleri paylaşır ancak unicode kullanımına özgü bazı ek fonksiyonlara sahiptir. Unicode nesnelerini kullanırken unutulmaması gereken bir detay eğer nesne ASCII karakterlerinin dışında veri içerecekse unicode nesnesinin encode() fonksiyonunu kullanarak uygun karakter setine dönüştürülmesini sağlamaktır. Gerek string gerekse unicode nesneleri temelde bazı liste fonksiyonlarını ve dilimleme gibi bazı liste özelliklerini de destekler. Bir string ', " veya """ karakterlerinin arasına alınarak yazılabilir. Dikkat edilmesi gereken nokta sözkonusu string yazılmaya hangi karakter ile başlanmışsa aynı karakter ile bitirilmelidir. Örneğin "Ali'nin" geçerli bir yazım iken 'Ali "kırkiki" dedi" şeklinde bir yazım hatalıdır. Bir kısayol olarak unicode nesneleri yaratılacağında string operatörlerinin başına bir adet u harfi getirilerek doğrudan unicode nesneleri yaratılabilir. Buna göre "Kırkiki" bize normal bir string nesnesi u"Kırkiki" ise bir unicode nesnesi verecektir.
Python C printf tarzı metin biçimlendirme (String Formatting) karakterlerini destekler. Bu biçimlendirme karakterlerinin tam bir listesine http://www.python.org/doc/current/lib/typesseq-strings.htmla> adresinden ulaşabilirsiniz. Bu tip metin biçimlendirme işlemlerinde Python'un getirdiği bir kolaylık biçimlenecek metnin içine koyulacak değerleri bir liste yerine sözlükten alabilme özelliğidir. Bu sayede biçimlendirilecek metnin içine yerleştirilecek veriler listedeki sıralarından bağımsız olarak isimleriyle kullanılabilirler. Örneğin:
>>> print "%d = %s"%(42,"Kırkiki") #Klasik biçimlendirme.
42 = Kırkiki #Elemanların sırası değiştirilemez.
>>> sozluk = {"sayi":42, "yazi":"Kırkiki"}
>>> print "%(yazi)s = %(sayi)d"%sozluk #Sözlük kulanarak biçimlendirme
Kırkiki = 42 #yaptığımızda daha sonra elemanların sırasını değiştirebiliriz.
>>>
Dizi Tipleri (Sequence Types)
Python tek bir dizi tipi yerine kendi içerisinde Tuple (tüp) ve List (liste) olmak üzere iki farklı veri tipi barındırır. Diğer tüm veri tipleri gibi Bu tiplerde programcının oluşturacağı sınıflar tarafından taklit edilebilirler. Tüp tipindeki verilerin en büyük özelliği içerdiği verilerin değiştirilmesinin mümkün olmamasıdır. Buna karşılık Liste tipindeki veriler diğer dillerden bildiğimiz dizi tipindeki veriler ile aynı özellikleri gösterirler. Python dizi tiplerinin diğer dillerdeki benzer tiplerden en önemli farkı negatif indeksler ve dizi dilimlemeleridir (slicing). Negatif indeksler sayesinde dizi elamanlarına alışıldık 0'dan <dizi uzunluğu> - 1'e kadar olan sayılarla erişim dışında dizinin sonundan başlayarak negatif sayılarla da erişebiliriz. Dizinin son elemanı -1 olmak üzere başa doğru gidildikçe küçülen negatif sayılarla dizinin diğer elemanlarına erişebiliriz. Buna göre dizi[-1] bize dizinin son elemanını verirken dizi[-2] sondan ikinci elemanı verecektir. Bu özellik Python'un dizi dilimleme yetenekleri ile birleştirildiğinde bize dizilerin belirli bölümlerini ayıklamak konusunda oldukça güçlü bir araç sunar.
Dizi dilimleme dizi veya dizi-benzeri bir veri tipindeki verilerin belirli bir bölümünü almamızı sağlar. Dilimler başlangıç ve bitiş indeksleri verilerek diziden alınır. Dizi dilimlemek için olağan dizi erişim şekli olan dizi[indeks] yazımı yerine dizi[başlangıç indeksi:bitiş indeksi] şeklinde bir yazım kullanmak gerekir. Bu şekilde aldığımız bölüm dizinin belirttiğimiz indekse sahip elemanlarının arasındaki elemanların bir kopyası olacaktır. Başlangıç indeksinin verilmemesi durumunda dizinin başından bitiş indeksine kadar, bitiş indeksinin verilmemesi durumunda ise başlangıç indeksinden dizinin sonuna kadar olan bölüm alınacaktır. Bu durumu birkaç örnekle açıklamak gerekirse:
>>> dizi = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> dizi[-3] #Negatif indeks dizinin son elmanını döndürür
7
>>> dizi[3:8] #Dizinin üçüncü ile sekizinci elemanları arasındaki bölümü döndürür
[3, 4, 5, 6, 7]
>>> dizi[3:-2] #Dizinin üçüncü ile sondan ikinci elemanları arasındaki bölümü döndür
[3, 4, 5, 6, 7]
>>> dizi[:4] #Dizinin ilk dört elemanını döndürür
[0, 1, 2, 3]
>>> dizi[4:] #Dizinin dördüncüden sonraki elemanlarını döndürür
[4, 5, 6, 7, 8, 9]
>>> dizi[:] #Dizinin bir kopyasını döndürür
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>
Eşleştirme Tiperi (Mapping Types)
Python öntanımlı olarak sadece bir temel eşleştirme tipi ile gelir: Sözlük (Dictionary). Eşleştirme tipleri anahtar:veri şeklindeki veri yapılarını saklamak için kullanılırlar. Eşleştirme tipleri yapı olarak dizi tiplerine benzese de dizilerin indekslerinin aksine eşleştirme tiplerinin anahtarları sıralı değildir. Anahtarlar hemen hemen her tipteki veriden karışık şekilde oluşabilir ancak tek kural anahtar olacak verilerin değişmez (immutable) bir tipte olmasıdır. Örneğin tüpler, stringler ve sayısal tipler anahtar olabilirken değişken bir tip olan listenin anahtar olması mümkün değildir. Veri kısmı içinse bu tip bir kısıtlama mevcut değildir.
Bir sözlük yaratmanın en kolay yolu anahtar, veri ikililerini süslü parantezlerin ("{" ve "}" karakterleri) içerisine yazmaktır. Örneğin:
sozluk = {42:'Kırkiki', '00101010':'foobar'}
None Nesnesi
None nesnesi C'deki NULL veya Pascal'daki Nil değerinin Python'daki benzeridir. Varolmayan değerleri ifade etmekte kullanılan None nesnesinin doğruluk değeri yanlış'a denktir.