Şu ana kadar Python'daki iki veri yapısını gördük: stringler ve listeler. Bu iki yapı da, fonksiyonların varyantları olan bazı metotları desteklemektedir.
Mesela reverse()
metodu list
ile kullanabileceğimiz bir metottur. İsminden anlaşılabileceği gibi bu, liste elementlerini tersten (yani ilk element en sona, son element en başa gelecek şekilde) sıralama metodudur. Bu metodu çağırmak için nokta ( . ) kullanarak şöyle bir yapı oluştururuz:
«nesneAdı».«metodunAdı»(«argüman listesi, eğer varsa»)
Karşılaştırmak üzere, fonksyionları çağırdığımakta kullandığımız sentaksı hatırlayalım
«fonksiyonAdı»(«argüman listesi, eğer varsa»)
Bir liste üzerinde reverse
metodunu kullandığımız bir örneğe bakalım.
Argüman olarak str.startswith
alan bir metoda bakalım:
Pek çok metot
Aşağıda liste ve string sınıflarında en sık kullanılan metotları göreceksiniz. Bu metotların yaptığı işlemler sizin de yazabiliyor olmanız gereken çözümler, ama standart metotları kullanmak kodunuzun yazılmasını, okunmasını ve düzenlenmesini kolaylaştırır.
Listeler
Bu metotlar listenizi değiştirmez:
list.index(X)
: ListedeX
elemanını bulmak. Özellikle, bulist[i]==X
listeyi tarayaraki
elemanını getirir. En küçüki
getirilir. Eğer listedeX
bulunmuyorsa, buValueError
değer hatasına sebep olur..- Eğer
X
listede yer alıyorsaX in list
yapısıTrue
, yer almıyorsaFalse
sonucunu getirir. Bunu kullanmaklaValueError
hatasından kaçınılabilir. (in
bir işlemcidir, metot değildir.)
- Eğer
list.count(X)
:X
elemanının listede kaç kez yer aldığını getirir.
Şu metotlar listeyi değiştirir:
list.append(X)
metodulist
listesinin sonunaX
elemanını ekler.list.insert(i, X)
metoduX
elemanınıi
konumuna yerleştirir.list.extend(L)
metodu listenin sonunaL
listesindeki elemanları ekler.list.remove(X)
metoduX
elemanını ik bulunduğu yerden siler.list.pop(i)
metodulist[i]
elemanını;list.pop()
ise en sondaki elemanı siler ve getirir.del list[i]
metodulist
listeinini
indeksinde yer alan elemanı siler (Bu bir "del
ifadesi"dir, metot değildir.)list.reverse()
listeyi tersine çevirir.list.sort()
listeyi düzene sokar.
Yukarıdaki metotlar pop
hariç None
sonucunu getirir. Bu fonksiyonlar biraz farklı argümanlarla da çağrılabilir; tüm detayları görmek için Python kaynaklarından liste metotlarını inceleyebilirsiniz. Listeler aynı zamanda "dilim" dediğimiz listelerin parçalara ayrılmasıyla alt aralıklarda silme ve yerleştirme işlemlerine olanak sağlar, tıpkı önceki derslerde gördüğümüz string[x:y:z]
notasyonu gibi.
Stringler
Listelerede kullandığımız in
, index
ve count
yapılarını stringlerle de kullanabiliriz. They are even more powerful, since they work with substrings too and not just finding individual characters:
S in T
bir bool'dur veS
stringininT
içerisinde yer alıp almadığını kontrol ederS.index(T)
T
altstringininS
indeksini verirS.count(T)
S
stringi içinde yer alanT
substringinin kaç kez geçtiğinin sayısını verir
En çok kullanılan str
metotlarından bazıları:
- Büyük-küçük harf:
capitalize, lower, upper, islower, isupper
- Karakter:
isalpha, isdigit
- Hizalama:
center, ljust, rjust
;strip
hizalamayı siler - Alt stringler:
endswith, startswith, find, replace
- Ayırma:
split, splitlines
Yeri geldikçe bunları daha ayrıntılı açıklayacağız. Bunların detaylı ve eksiksiz listesini string metotları olarak Python kaynakalrından inceleyebilirsiniz.
Stringler değiştirilemez. Yukarıda listeleri ters yüz eden list.reverse()
yapısını görmüştük, stringler için str.reverse()
gibi metot söz konusu değildir. Bunun sebebi stirnglerin değiştirilemez oluşudur. 17. derste bunun hakkında biraz daha konuşacağız.
String metotları hakkında bir örneğe bakalım: S.replace(eski, yeni)
S
'yi eski
substringi (altstringi) yerine yeni
yazararak değiştirir. Eskini değiştirmeksizin yeni bir strign oluşturur:
Bir sonraki alıştırma için şu metotlar kullanışlı olacak:
str.replace
, şimdi gördüğümüz metot- boolean metodu olan
str.isalpha()
eğerstr
stringi (veya karakter) sadece harflerden oluşuyorsaTrue
sonucunu verir - bir başka boolean metodu
str.isdigit()
eğerstr
stringi (veya karakter) sadece rakamlardan oluşuyorsaTrue
sonucunu verirTrue
if str.upper()
metodustr
stringindeki karakterlerin hepsini büyük harfle yazar.
Dersin devamında, gelecek derserde fazla ihtiyaç duymayacağınız teknik bilgiler bulunuyor. |
Nesneler Hakkında
Python bilginiz arttıkça, string ve listelerdan başka sınıflar olduğunu da göreceksiniz. İşinize yarayabilecek diğerleri; file objects (dosya nesneleri), sets (setler) ve dictionaries (sözlükler). Hepsinde kullanışlı metotlar var. Python'a mevcut nesneye ait bütün metotları dir
fonksiyonunu kullanarak sorabilirsiniz:
Bir nesnenin özelliklerine (properties) bakmak introspection (içgözlem) olarak adlandırılır. Python'da tüm nesnelerin metotları vardır:
dir
içerisindeki bazı girişler aslında metot değil üye değişkenlerdir (member variables), mesela int.denominator
bir fonksiyon değil bir sayıdır. Teknik olarak, Python'daki fonksiyonlar nesnedir, yani üye fonksiyonlar, üye değişknelerin özel bir durumudur.
Modüllerde de introspection yapılabilir. Eğer import math
yapıp sonra da dir(math)
çağırırsanız, pi
sayısı ve sqrt
fonksiyonu dâhil olmak üzere math
modülü içerisindeki her şeyin bir listesini elde edersiniz.
Neden nesneler?
index(S, T)
gibi basit fonksiyonlar varken neden S.index(T)
şeklinde metotlar kullanıyoruz? Başka bir deyişle niçin S
gibi nesnlere ve str.index()
metotlara neden ihtiyaç var?
Nesnelerin asıl büyük faydalarını daha karmaşık ve farklı tipten datalarla programlamaya başladığınızda göreceksiniz. Her tipten obje (örn. str
class) hem depolanan verinin esasını (mesela, bir karakterler dizisi ve onun uzunluğu) ve üzerinde yapılabilecek işlem tiperini (mesela, büyük harfe çevrimek veya altstringlerini oluşturmak) temsil eder. Daha karmaşık bir örnek olarak dosya nesneleri (file objects): açılan dosyanın adını, dosyadaki mevcut durumunuzu ve okuma ve yazmak için kullanacağınız metotları ifade eder. Hatta kendi data tiplerinizi beirleyebilirsiniz!
Bu genel yaklaşım "object-oriented programming" (OOP) [Nesne Yönelimli Programlama] olarak adlandırılır. Bu yaklaşımın bazı faydaları şunlardır:
- organizasyon:
math
modülündeki her şeyemath.«name»
sentaksıyla ulaşarak programınızda mevcut değişken adlarının üzerine yazılma ihtimalinden kaçınmış olursunuz. - kapsülleme: Bir programın aynı anda birkaç string veya dosya ile çalışabildiği gibi, herhangi bir başka classta tanımlanmış pek çok farklı data tipinden kopyalarla (instances) çalışabilirsiniz.
- tekrar kullanma: Bir kez bir data tipi (
str
gibi) veya bir metot kütüphanesi (math
gibi) tanımladıktan sonra onu tekrar tekrar kullanabilir, kullanmaları için başkalarına verebilirsiniz. - hata ayıklama: Daha önceden gördüğümüz gibi bir fonksiyon tanımlayarak benzer kodları defalarca yazmak zorunluluğundan kurtuluruz. Bir data tipi ile ilgili fonksiyonları bir tek yerde yazmakla (class definition/sınıf tanımlama) da aynı kolaylığı sağlarız.
- Sınıflar arası ilişkiler: Python
index
metodunun string için bir şey, list için başka anlama geldiğini bilir. Aynı şekilde Python, yalnız bilgisyardaki dosyalarınız üzerinde değil internet üzerinde de data yazıp okuma işlemi yapabilir. Her iki hâlde de (karakter veya list dizileri, lokal veya uzak dosyalar) ilgili sınıflar miras (inheritance) kavramı çerçevesinde tek şekilde ele alınabilir.
CS Circles'ın devamında sadece nesneleri ve metotları kullanacağız; kendi sınıflarınızı oluşturma konusunda ileride daha çok bilgi edineceksiniz. (bkz. Kaynak sayfaları).
Bundan sonraki üç dersi istediğiniz sırayla yapabilirsiniz. Bu derslerde daha önceden öğrendiklerimizi bir arada kullanmamızı gerektirecek karmaış problemlerle karşılaşacaksınız.