12 - Yüksek Mertebeden Fonksiyonlar ve Liste Üreteçleri
2024
Bu bölümde, Python’da iterable’lar (listeler, demetler vb.) üzerinde işlemler yapmak için kullanılan map, filter, zip ve reduce gibi yüksek mertebeden fonksiyonları (higher-order functions) ve liste üreteçlerini öğreneceğiz.
Tanım: Başka bir fonksiyonu argüman olarak alan veya sonuç olarak fonksiyon döndüren fonksiyonlara “yüksek mertebeden fonksiyon” denir.
Bu araçlar, kodunuzu daha öz, okunabilir ve verimli hale getirmenize yardımcı olur.
range nesneleri yinelenebilir nesne örnekleridir.for döngüsü ile bu nesnelerin elemanları üzerinde dolaşabiliriz.Sözdizimi:
lambda: Lambda fonksiyonu tanımlamak için kullanılır.argümanlar: Fonksiyonun alacağı argümanlar (virgülle ayrılmış).ifade: Fonksiyonun döndüreceği değeri hesaplayan ifade.Örnekler:
kare = lambda x: x*x) yerine, genellikle map veya filter içinde anlık olarak kullanırız. İsimlendirilmiş fonksiyonlar için def kullanmak daha doğrudur.map() Fonksiyonu: Her Elemana Aynı İşlemi Uygulamap() fonksiyonu, bir fonksiyonu bir yinelenebilir nesnenin her elemanına uygular ve sonuçları yeni bir map nesnesi olarak döndürür.Sözdizimi:
fonksiyon: Yinelenebilir nesnenin her elemanına uygulanacak fonksiyon.iterable: İşlem yapılacak yinelenebilir nesne.map (ve filter, zip) Python 3’te “Tembel” (Lazy) çalışır. Sonuçları bellekte tutmaz, istendiğinde üretir. Bu yüzden çıktıları görebilmek için list() veya tuple() içine alırız.Örnekler (lambda fonksiyonu kullanmadan):
Örnekler (lambda fonksiyonu ile):
filter() Fonksiyonu: Elemanları Filtrelefilter() fonksiyonu, bir fonksiyonu bir yinelenebilir nesnenin her elemanına uygular ve fonksiyonun True döndürdüğü elemanlardan oluşan yeni bir filter nesnesi döndürür.Sözdizimi:
fonksiyon: Yinelenebilir nesnenin her elemanına uygulanacak ve True veya False döndüren fonksiyon.iterable: İşlem yapılacak yinelenebilir nesne.Örnekler (lambda fonksiyonu kullanmadan):
Örnekler (lambda fonksiyonu ile):
zip() Fonksiyonu: Yinelenebilir Nesneleri Birleştirzip() fonksiyonu, iki veya daha fazla yinelenebilir nesneyi birleştirerek, elemanlarını tuple’lar halinde gruplandırır ve yeni bir zip nesnesi döndürür.Sözdizimi:
iterable1, iterable2, ...: Birleştirilecek yinelenebilir nesneler.Örnekler:
isimler = ["Ahmet", "Mehmet", "Ayşe"]
yaslar = [25, 30, 22]
# İki listeyi birleştirerek tuple'lar oluştur
birlesim = list(zip(isimler, yaslar))
print(birlesim) # Çıktı: [('Ahmet', 25), ('Mehmet', 30), ('Ayşe', 22)]
# Sözlük oluşturma
sozluk = dict(zip(isimler, yaslar))
print(sozluk) # Çıktı: {'Ahmet': 25, 'Mehmet': 30, 'Ayşe': 22}zip() işlemi en kısa listeye göre sonlanır. Uzun olan listenin artan elemanları işleme dahil edilmez.reduce() Fonksiyonu: Tek Bir Sonuç Üretreduce() fonksiyonu, bir fonksiyonu bir yinelenebilir nesnenin elemanlarına soldan sağa doğru ardışık olarak uygular ve tek bir sonuç değeri döndürür.functools modülünden içe aktarılması gerekir.Sözdizimi:
fonksiyon: İki argüman alan ve tek bir sonuç döndüren fonksiyon.iterable: İşlem yapılacak yinelenebilir nesne.başlangıç_değeri: İsteğe bağlı başlangıç değeri.Örnekler (lambda kullanmadan):
Örnekler (lambda ile):
for döngüsü ve koşullu ifadeler kullanarak yeni listeler oluşturabilirsiniz.Sözdizimi:
ifade: Yeni listeye eklenecek değer.eleman: Iterable’ın her elemanı.iterable: İşlem yapılacak iterable.koşul: İsteğe bağlı bir koşul.Liste üreteçlerinin nasıl çalıştığını anlamak için, öncelikle liste üreteci ifadesini bir döngü ve koşullu ifade kullanarak nasıl yazabileceğimize bakalım:
sayilar = [1, 2, 3, 4, 5]
kareler = []
for x in sayilar:
kareler.append(x * x)
print(kareler) # Çıktı: [1, 4, 9, 16, 25]sayilar listesindeki her sayının karesini alır ve kareler listesine ekler.Örnek 1: Filtreleme (Koşul Sonda)
Önemli: Koşul İfadelerinin Konumu
Liste üreteçlerinde if ifadesinin yeri, yaptığı işi değiştirir:
Örnek: String İşlemleri
map kullanın - lambda ile ve lambda olmadan).filter kullanın - lambda ile ve lambda olmadan).zip kullanın).reduce kullanın - lambda ile ve lambda olmadan).