İşlevsel Yazılım Geliştirme Aracları Listelerle kullanıldığında cok faydalı olan yerleşik işlevler vardır: filter(), map(), ve reduce(). filter(işlev, sıra) sıra icerisinden işlev(eleman)'ın doğru sonuc verdiği elemanların bulunduğu (mumkunse aynı turden) bir sıra geri dondurur. Orneğin, bazı asal sayıları hesaplamak icin şoyle yapılabilir: >>> def f(x): return x % 2 != 0 and x % 3 != 0 ... >>> filter(f, range(2, 25)) [5, 7, 11, 13, 17, 19, 23] map(işlev, sıra) sıranın her elemanı icin işlev(sıra) cağırır ve geri dondurulen değerlerin oluşturduğu listeyi geri dondurur. Orneğin bazı sayıların kuplerini hesaplamak icin şu yol izlenebilir: >>> def cube(x): return x*x*x ... >>> map(cube, range(1, 11)) [1, 8, 27, 64, 125, 216, 343, 512, 729, 1000] map(işlev, sıra) ifadesinde birden fazla sıra da kullanılabilir; ancak bu durumda işlev sıra sayısı kadar argumana sahip olmalıdır. işlev her sıranın uygun elemanını bir arguman olarak alır; ancak sıralardan biri kısa ise eksik elemanlar icin işleve None argumanı gecirilir. Eğer işlev adı icin de None kullanılırsa argumanlarını geri donduren bir işlev etkisi yaratılır. Bu iki ozel durumu birleştirerek map(None, list1, list2) ifadesi ile bir cift diziyi ciftlerden oluşan bir diziye cevirebiliriz. Ornek: >>> sira = range(8) >>> def kare(x): return x*x ... >>> map(None, sira, map(kare, sira)) [(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25), (6, 36), (7, 49)] reduce(işlev, sıra) ifadesi tek bir değer geri dondurur. Bu değer şoyle elde edilir: iki argumanlı işleve sıranın ilk iki elemanı arguman olarak verilir, sonra da elde edilen sonuc ile sıranın sonraki elemanı arguman olarak verilir, daha sonra yine elde edilen sonuc ile bir sonraki eleman işleve verilir ve bu işlem butun elemanlar icin tekrarlanır. Orneğin 1'den 10'a kadar olanlar boyle toplanabilir: >>> def topla(x,y): return x+y ... >>> reduce(topla, range(1, 11)) 55 Sırada sadece bir eleman var ise bunun değeri geri dondurulur; sıra boş ise bir istisna oluşur (exception). Başlangıc değerini bildirmek icin ucuncu bir arguman kullanılabilir. Bu durumda işleve ilk olarak başlangıc değeri ve sıranın ilk elemanına uygulanır ve diğer elemanlar ile devam eder. Ornek: >>> def sonuc(sira): ... def topla(x,y): return x+y ... return reduce(topla, sira, 0) ... >>> sonuc(range(1, 11)) 55 >>> sonuc([]) 0
__________________
Python - İşlevsel Yazılım Geliştirme Aracları
Programlama0 Mesaj
●35 Görüntüleme
- ReadBull.net
- Programlama ve Yazılım
- Programlama
- Python - İşlevsel Yazılım Geliştirme Aracları