Ş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): ListedeXelemanını bulmak. Özellikle, bulist[i]==Xlisteyi tarayarakielemanını getirir. En küçükigetirilir. Eğer listedeXbulunmuyorsa, buValueErrordeğer hatasına sebep olur..- Eğer
Xlistede yer alıyorsaX in listyapısıTrue, yer almıyorsaFalsesonucunu getirir. Bunu kullanmaklaValueErrorhatasından kaçınılabilir. (inbir işlemcidir, metot değildir.)
- Eğer
list.count(X):Xelemanının listede kaç kez yer aldığını getirir.
Şu metotlar listeyi değiştirir:
list.append(X)metodulistlistesinin sonunaXelemanını ekler.list.insert(i, X)metoduXelemanınıikonumuna yerleştirir.list.extend(L)metodu listenin sonunaLlistesindeki elemanları ekler.list.remove(X)metoduXelemanı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]metodulistlisteininiindeksinde yer alan elemanı siler (Bu bir "delifadesi"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 Tbir bool'dur veSstringininTiçerisinde yer alıp almadığını kontrol ederS.index(T)TaltstringininSindeksini verirS.count(T)Sstringi içinde yer alanTsubstringinin 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;striphizalamayı 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ğerstrstringi (veya karakter) sadece harflerden oluşuyorsaTruesonucunu verir - bir başka boolean metodu
str.isdigit()eğerstrstringi (veya karakter) sadece rakamlardan oluşuyorsaTruesonucunu verirTrueif str.upper()metodustrstringindeki 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:
mathmodü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 (
strgibi) veya bir metot kütüphanesi (mathgibi) 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
indexmetodunun 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.




