Merhaba Arkadaşlar,
Mobilhanem.com da Python Eğitimi Serisinin bu dersinde Python Gömülü Fonksiyonlar ile birlikteyiz. Bu derste Python da bazı önemli gömülü fonksiyonlar olan map(), reduce(), filter() ve zip() fonksiyonlarını birlikte işleyeceğiz. Aklınız da ki ilk soru;
Gömülü fonksiyon nedir?
Gömülü fonksiyonlar bizim oluşturduğumuz fonksiyonlardan farklı olarak Python kurulumu ile birlikte hazır gelen fonksiyonlar dır. Bu fonksiyonlar daha önce Python geliştiricileri tarafından geliştirilmiş fonksiyonlar olduğu için bu fonksiyonları tanımlamamıza gerek yok yoktur. Örneğin; print(), len(), type(), input() gibi daha öncede kullandığımız bu fonksiyonlar birer gömülü fonksiyondur. Bu fonksiyonları tanımlamadan direk çağırıp kullanabiliyoruz. Bizde bu derste işimize yarayacak bazı önemli olan gömülü fonksiyonları işleyeceğiz.
Bazı Gömülü Fonksiyonlar
Bu derste en çok kullanılan gömülü fonksiyonları ele alacağım dilerseniz diğer fonksiyonlara buradan ulaşabilirsiniz.
Map()
Bu fonksiyon değişkenler üzerinde fonksiyonlarla yapmak istediğiniz işlemlerde kolaylık sağlar kafanız çok karışmadan hemen bir örnek ile göstereyim o zaman çok iyi anlayacaksınız. Bunun öncesinde map() fonksiyonun önce genel taslağını görelim.
Map(fonksiyon,iter1,iter2)
İteratör dediğimiz şey bir liste, bir tuple(demet) veya başka bir veri tipi olabilir.
Elimizde bir liste olsun ve biz bu listenin tüm elemanlarının karesini alalım.
liste = [1,2,3,4,5,6,7,8,9,10] def kareAl(sayi): return sayi**2 map1 = map(kareAl,liste)
Gördüğününüz gibi map() fonksiyonunu map1 isimli değişkene atadık hemen ekrana yazdıralım.
print(map1) <map object at 0x000002DFD0A76860>
Gördüğünüz gibi map() objesi aldık sonuç olarak bizim bunu görebilmemiz için değişkeni liste türüne veya başka bir veri türüne dönüştürelim. Biz liste türüne dönüştürelim.
map1 = list(map1) print(map1) [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
Görüldüğü gibi listenin tüm elemanlarının karesini aldık. Bir önceki dersimizde işlediğimiz lambda() fonksiyonu ile gömülü fonksiyonları çok daha rahat uygulayabileceğimizi söylemiştik. Aynı örneği lamda fonksiyonu ile yapalım o zaman çok daha iyi anlayacaksınız.
liste = [1,2,3,4,5,6,7,8,9,10] map2 = map(lambda sayi:sayi**2,liste) print(list(map2))
Görüldüğü gibi lambda() fonksiyonu ile çok daha rahat yapabiliyoruz.
Özlü bir açıklama yaparsak map() fonksiyonu birden fazla parametre alır birincisi bir fonksiyon olmak üzere ve fonksiyonu diğer parametrelere uygular. Yani sadece bir veri türüne uygulamakla sınırlı değildir. Hemen bir örnekle gösterelim.
liste1 = [1,3,5,9,7,6] liste2 = [6,8,7,9,4,6] liste3 = [8,4,9,3,1,5] map2 = map(lambda x,y,z:x*y*z,liste1,liste2,liste3) print(list(map2))
Gördüğünüz gibi map() fonksiyonunu aynı anda birden fazla veri üzerine uygulayabiliyoruz.
Reduce()
Bu fonksiyonun da yapısı hemen hemen map() fonksiyonun yapısına benzer. Bu fonksiyon da parametre olarak aldığı fonksiyonu diğer parametre olan liste vb. verilerin ilk iki elmanın üzerine uygular. Kafanız karıştı biliyorum bir örnekle ile gösterirsek daha iyi anlayacaksınız.
Hemen genel taslağımızı görelim.
Reduce(fonksiyon,iter1,iter2)
Örneği anlatmadan önce sonradan gelen versiyonlardan sonra reduce() fonksiyonunu projeye dahil etmemiz gerekiyor bunun için ilk önce reduce() fonksiyonunu projeye dahil edelim.
from functools import reduce
Kafanız karışmasın sonraki derslerde projeye dahilde etme konusunu detaylıca işlyeceğim siz şimdilik reduce fonksiyonun genel yapısına odaklanın.
liste = [0,1,2,3,4,5,6] reduc1 = reduce(lambda x,y:x+y,liste) print(reduc1)
Hemen kısaca açıklayayım;
İlk önce ilk elemanı toplar sonra sonucu sonraki elemen ile tople böylece devam eder.
0+1 =1 1+2 =3 3+3 =6 6+4 =10 10+5 =15 15+6 = 21
Başka bir örnek daha yaparak bir sonraki fonksiyona geçelim.
from functools import reduce liste = [1,2,3,4,5] reduc1 = reduce(lambda x,y:x*y,liste) print(reduc1)
1*2 = 2 2*3 = 6 6*4 = 24 24*5 = 120
Çıkan sonucun liste elemanının faktöriyeli olduğunu göreceksiniz.
Filter()
filter() fonksiyonu hemen hemen reduce() fonksiyonu ile aynıdır fakat filter() fonksiyonu için verilen parametredeki fonksiyon sadece mantıksal(True, False) bir değer döndürmelidir..Bunun sonucunda filter fonksiyonu true değerlerine karşılık bir liste döndürür. Bu sayede liste üzerinde bir filtre oluşturmuş olur. Sql de ki sorgu işlemleri gibi düşünebilirsiniz. Örneklerle çok iyi anlaycaksınız.
Elimizde 20 kadar sayıların olduğu bir liste olsun biz bu listedeki çift sayıları alalım. Bu sayede liste üzerinde bir filtre oluşturmuş sadece çift sayı olma koşulu sağlayan sayıları olan bir liste elde edeceğiz.
liste = range(20) filter1 = filter(lambda sayi:sayi%2==0,liste) print(list(filter1)) [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
Başka bir örnek ile çok daha iyi anlayacaksınız. Bu sefer elimizde 0 dan 1000 kadar sayıların olduğu bir liste olsun biz bu liste içinde asal olan sayıları bulalım. Bu sefer lambda() fonksiyonu değilde normal fonksiyon kullanacağım çünkü daha öncede bahsettiğim gibi karmaşık olan fonksiyonlarda lambda() fonksiyonu ile yazamıyoruz.
liste = range(100) def asalSayi(sayi): i = 2 if sayi ==2: return True elif sayi<2: return False else: while(i<sayi): if sayi%i==0: return False i +=1 return True filter2 = filter(asalSayi,liste) print(list(filter2)) [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
Ayrıca burada dikkat etmemiz gereken bir nokta daha var filter() fonksiyonu da map() fonksiyonu gibi bir object türünde bir değer döndürür bu yüzden liste türüne çevirip bu şekilde ulaşabiliyoruz.
Zip()
Bir gömülü fonksiyon olan zip() fonksiyonu kullanımı diğer fonksiyonlardan biraz farklıdır. Zip() fonksiyonunda aldığı parametreler de fonksiyon olmaz. Zip() fonksiyonu kısacası gruplandırma işlemini yapıyor diyebiliriz. Hemen bir örnekle gösterelim.
Elimizde iki farklı liste olsun birinci liste öğrencinin okul numarası ikincisi ise öğrencinin ismi olsun biz bunları gruplandıralım.
no = [23,56,87,47,12,36,45,47] isim=["Ahmet","Mehmet","Ayşe","Zeynep","Elif","Kemal","Fatma","Can"] zip1 =zip(no,isim) print(list(zip1)) [(23, 'Ahmet'), (56, 'Mehmet'), (87, 'Ayşe'), (47, 'Zeynep'), (12, 'Elif'), (36, 'Kemal'), (45, 'Fatma'), (47, 'Can')]
Zip() fonksiyonu da diğer fonksiyonlar gibi bir object değer döndürür bu yüzden tür değiştirme yaptık.
Zip() fonksiyonu sadece guruplandırma işlemi yapmıyor ayrıca birden fazla değerin kontol edilmesi gereken durumlarda da kullanılır.
liste1 = [1,6,8,9,25,36,14,52,69,21] liste2 = [3,5,25,14,41,36,58,60,20,30] for i,j in zip(liste1,liste2): filter1 = filter(lambda i:i%3==0,liste1) filter2 = filter(lambda j:j%5==0,liste2) print("3'ün katları",list(filter1)) print("5'in katları",list(filter2)) 3'ün katları [6, 9, 36, 69, 21] 5'in katları [5, 25, 60, 20, 30]
Bu şekilde zip() fonksiyonumuzu da öğrenmiş olduk. Pythonda gömülü fonksiyon kavramında en çok kullanılan fonksiyonları ele aldık. Dilerseniz buradan diğer gömülü fonksiyonlara bakabilirsiniz.
Mobilhanem.com da Pyhon da Gömülü Fonksiyonlar dersinin sonuna geldik bir sonraki yazımızda Fonksiyonlarda Decorator, iterator ve generator kavramlarını ele alacağız. Eksik yada yanlış gördüğünüz yada anlamadığınız yerler için çekinmeden ulaşabilirsiniz.
Bütün Python derslerine buradan ulaşabilirsiniz.
108
hocam asal sayı örneğinde ben aynı sonucu bulamıyorum. nerde hata yapıyor olabilirim? tek sayılar çıkıyor.
Merhaba yılmaz kodu paylaşırsanız size yardımcı olabilirim.
kodlar
liste=range(100)
def asalsayı(sayı):
i=2
if sayı==2:
return True
elif sayı<2:
return False
else:
while(i<sayı):
if sayı%i==0:
return False
i+=1
return True
filter2=filter(asalsayı,liste)
print(list(filter2))
merhaba yılmaz kodlarında bir sıkıntı yok. tek sayıların tek çıkması çok normal çünkü 2 hariç bütün asal sayılar tektir 🙂
kodu burada yine paylaşıyorum kolay gelsin. https://paste.ubuntu.com/p/JXDRVCSj9s/
Hocam merhabalar kolay gelsin ,
Bir array veya list içinde nasıl işlem yapabiliriz ? Örneğin;
A=[ 1, 1, 2,3 ,3,9 ] Böyle bir listede ikinci elamanı birinci elemandan çıkarmak istiyorum ve bunun devam etmesini istiyorum sürekli. 1-1 , 2-1, 3-2 , 3-3, 9-3 gibi . Bunu sonra list haline nasıl getirebilirim?
Aslında benim yapmam gereken gündelik yüzde hesaplama da . Her günün verisi var elimde . Bunu yapmaya çalışıyorum
liste1 = [1,1,2,3,3,9]
liste2=[]
for i in range (1,len(liste1)):
sonuc = liste1[i]-liste1[i-1]
liste2.append(sonuc)
print(liste2)
liste 1 yerine istediğin sayıları girebilirsin
Hocam merhaba reduce fonksiyonu ile verilen iki listeyi birleştirmek istiyorum isimlerine göre atıyorum ezgi ye bir de soyadı eklenicek gibi bu kodu nasıl yapabilirim?
güzel site olmuş rafık
print(“cahit işleyen “)
>>>’kral’