Python’da Fonksiyonlar
Fonksiyonlar sadece çağırıldıklarında çalışan bir kod bloğudurlar. Fonksiyonun çağırılması ifadesi, fonksiyona verilen ismin kodun bir bölümünde kullanılması anlamını taşımaktadır. Dilerseniz fonksiyonlara parametreler vasıtasıyla veri de göndererek içindeki kod bloğunda kullanılmasını sağlayabilirsiniz. Fonksiyonlar sonuç olarak bir veri döndürürler.
Python’da bir fonksiyon oluşturmak için def anahtar kelimesi kullanılır;
def ilkFonksiyonum(): print("İlk fonksiyonumuzu oluşturduk!") # Fonksiyonumuzu çağırarak çalıştıralım ilkFonksiyonum()
Çıktı:
İlk fonksiyonumuzu oluşturduk!
Parametreli Fonksiyonlar
Python’da parametre ifadesi yerine argüman ifadesiyle de karşılaşırsınız. Esasında aynı anlamı taşırlar ve fonksiyona veri gönderilmesini sağlayan yapılardır. Python’da args kısaltmasıyla karşılaştığınızda argüman(parametre) anlamını taşıdığını unutmayın.
Fonksiyonu tanımlarken kullandığınız parametre sayısı ile o fonksiyona çağrı yaparak çalıştırmak istediğinizde bu parametrelere gönderdiğiniz veri sayısı eşit olmalıdır. Aksi takdirde uygulama hata verir.
ilkSayi=input("Bir sayı giriniz: ") ikinciSayi= input("İkinci sayıyı giriniz: ") def toplama(ilkSayi,ikinciSayi): print("Sayıların toplamı: ", int(ilkSayi)+int(ikinciSayi)) toplama(ilkSayi,ikinciSayi)
Çıktı:
Bir sayı giriniz: 345 İkinci sayıyı giriniz: 988 Sayıların toplamı: 1333
Eğer parametreye bir ön tanımlı değer verirsek, kullanıcı parametre göndermeyi unuttuğunda bu varsayılan değer ile işlem gerçekleştirilir. Böylece fonksiyondaki parametreye veri gönderilmediği için hata vermesinin de önüne geçilmiş olur.
def selamlama(kisi="arkadaş!"): print("Merhaba " + kisi) selamlama("Oben") selamlama()
Çıktı:
Merhaba Oben Merhaba arkadaş!
*args: Parametre Sayısı Bilinmediğinde
Eğer fonksiyonunuza kaç adet veri gönderileceğini bilmiyor iseniz, parametre adından önce bir yıldız * simgesi yerleştirerek fonksiyonu tanımlayabilirsiniz. Bu şekilde fonksiyon parametrelerden oluşan bir demet veri koleksiyonunu alabilir ve fonksiyon içinde bu demette yer alan verilere erişilerek kullanılabilir.
def toplama(*rakamlar): toplam=0 for x in rakamlar: toplam += x print("Toplam: ", toplam) toplama(34, 45, 3, 76)
Çıktı:
Toplam: 158
DeğişkenAdı=Değeri İkili Parametreleri
Fonksiyonları çalıştırmak üzere çağrı yaparken fonksiyon içinde işlenmek üzere göndermek istediğiniz parametreleri anahtar-değer ikilileri şeklinde de gönderebilirsiniz;
def personeller(personel3, personel2, personel1): print("Python deneyimli personelimiz: " + personel3) personeller(personel1="Oben Seven", personel2="Mert Demir", personel3="Ceren Aydın")
Çıktı:
Python deneyimli personelimiz: Ceren Aydın
DeğişkenAdı=Değeri ifadelerini fonksiyona çağrı yaparken parametre olarak oluşturduğumuzda fonksiyona gönderiliş sırasının önemli olmadığına dikkat ediniz.
Ancak değişkenleri fonksiyon çağrısı içinde değil de daha önce oluşturursak, fonksiyona gönderiliş sırası sonucu değiştirir;
def personeller(personel3, personel2, personel1): print("Python deneyimli personelimiz: " + personel3) personel1 = "Oben Seven" personel2 = "Mert Demir" personel3 = "Ceren Aydın" personeller(personel1,personel2,personel3)
Çıktı:
Python deneyimli personelimiz: Oben Seven
**kwargs: Parametre Sayısı Bilinmediğinde
Eğer fonksiyonunuza kaç adet Değişken Adı=Değeri formatında parametre gönderileceğini bilmiyor iseniz, parametre adından önce iki yıldız ** simgesi yerleştirerek fonksiyonu tanımlayabilirsiniz. Bu şekilde fonksiyon parametrelerden oluşan bir sözlük veri koleksiyonunu alabilir ve fonksiyon içinde bu sözlükte yer alan verilere erişilerek kullanılabilir.
def personel_bilgileri(deneyim, bildigiDil, personelAd): print(personelAd + " isimli personel şu dili kullanıyor: " + bildigiDil) personel_bilgileri(personelAd="Oben Seven", bildigiDil="Python", deneyim=18)
Çıktı:
Oben Seven isimli personel şu dili kullanıyor: Python
Parametre Veri Türleri
Fonksiyonunuza parametre olarak hangi türde veri(metin, sayısal, liste, demet, küme, sözlük) gönderirseniz fonksiyon içindeki kodlarda da o türdeki veriyi işlersiniz. Örneğin parametre oalrak bir liste gönderirseniz, fonksiyon içinde direkt liste işlemleri gerçekleştirebilirsiniz.
def listeyi_topla(listem): sonuc=0 for x in listem: sonuc += x print("Listedeki sayıların toplamı: ", sonuc) listem=[234,32,56,43] listeyi_topla(listem)
Çıktı:
Listedeki sayıların toplamı: 365
Gördüğünüz gibi parametre olarak liste gönderdiğimiz için fonksiyon içinde bu listenin içindeki veriler için döngü kullanabiliyoruz.
Fonksiyonlardan bir veri döndürmek için de return anahtar kelimesi kullanılır. Örneğin yukarıdaki listede yer alan sayıların toplamını 2 ile çarpan bir işlem gerçekleştirmek isersek, bunu şuş ekilde yazabiliriz;
def listeyi_topla(listem): sonuc=0 for x in listem: sonuc += x return sonuc listem=[234,32,56,43] print(listeyi_topla(listem)*2)
Çıktı:
730
Kendini Çağıran Fonksiyonlar(Recursion-Özyineleme)
Python’da bazı durumlarda fonksiyon içinde fonksiyonun kendisini çalıştırmanız gereken durumlarda ortaya çıkabilir. Python’da kendini çağıran fonksiyonları kullanabilirsiniz. Örneğin, kullanıcının yanlış bir veri girmesi durumunda doğru veriyi girmesi için fonksiyonu tekrar çalıştırmak üzere fonksiyon içinden çağırabilirsiniz. Bunu göstermek için pozitif iki sayıyı toplayan bir fonksiyon yazalım ve kullanıcı negatif bir değer verirse, pozitif sayı girmesini isteyelim;
def toplam(): x=int(input("Bir rakam giriniz: ")) y=int(input("Bir başka rakam daha giriniz: ")) if x>0 and y>0: print("Girdiğiniz iki rakamın toplamı: ",x+y) else: print("Lütfen pozitif sayılar giriniz!") toplam() toplam()
Çıktı:
Bir rakam giriniz: 5 Bir başka rakam daha giriniz: -6 Lütfen pozitif sayılar giriniz! Bir rakam giriniz: 5 Bir başka rakam daha giriniz: 6 Girdiğiniz iki rakamın toplamı: 11
Burada, pozitif tamsayıların toplamını alan fonksiyonumuz var. Kullanıcıdan alınan veriler ile işlem yapıyor ve kullanıcı negatif sayı verirse else kod bloğu çalıştırılarak kullanıcıya pozitif tamsayı girmesi gerektiği söylenerek fonksiyon kendini çağırıp yeniden başlatıyor.
Bir başka örnek verecek olursak eğer, aşağıdaki faktöriyel hesabı yapan kodu inceleyebilirsiniz;
def faktoriyel(n): if n<0: print("Maalesef negatif bir sayı girdiniz!") faktoriyel(int(input("Pozitif bir sayı ile tekrar deneyiniz: "))) else: sonuc=1 for x in range(n): sonuc *= (x+1) print(sonuc) faktoriyel(int(input("Faktöriyelini hesaplamak istediğiniz rakamı giriniz: ")))
Çıktı:
Faktöriyelini hesaplamak istediğiniz rakamı giriniz: -4 Maalesef negatif bir sayı girdiniz! Pozitif bir sayı ile tekrar deneyiniz: 5 120
Anonim Fonksiyonlar – Python Lambda
Lambda fonksiyonu Python’ın küçük bir anonim fonksiyonudur. Lambda fonksiyonu, istenilen sayıda parametre alır ama sadece tek bir ifade çalıştırır.
carpim = lambda a, b : a * b print("Sonuç: ", carpim(4,5))
Çıktı:
Sonuç: 20
Lambda fonksiyonunun gücü, bir başka fonksiyon içinde anonim bir fonksiyon olarak kullandığınızda ortaya çıkar. Örneğin bir fonksiyonumuz olsun ve tek bir parametre alsın. Fonksiyon çağırılarak çalıştırılırken bu parametreye atanan değeri, lambda fonksiyonuna ait bilinmeyen bir başka parametre ile çarparak sonucu döndürsün.
def carpma(x): return lambda y : x * y ikiyle_carp=carpma(2) ucle_carp=carpma(3) print(ikiyle_carp(18), ucle_carp(18))
Çıktı:
36 54