Python İle Fonksiyon Oluşturmanın Püf Noktaları
Bu dersimizde, Python’da önemli bir yeri olan fonksiyonları ve sahip olduğu özellikler hakkında detaylı bir bilgi vereceğiz. İlk olarak programlamada fonksiyonun ne olduğuna dair genel bir bilgi verelim ve Python’da fonksiyon ifadelerinin nasıl kullanıldığını detaylarıyla derleyelim.
Programlamada Fonksiyon Nedir?
Fonksiyon, matematikte değişken sayıları girdi olarak kabul edip bunlardan bir çıktı sayısı oluşmasını sağlayan kurallar bütünüdür desek yeridir.
Programlamada da benzer şekilde, belirli bir görevi yerine getirmesi için kullanılan bağımsız kod bloglarıdır diyebiliriz. Zira, girdi olarak parametreler alabilir ve bu girdilere bağlı olarak bir sonuç döndürebilir. Bakınız: “girdi – fonksiyon – çıktı“
Tıpkı gündelik yaşamımızda daha büyük bir görevi yerine getirmek için onları daha küçük, daha yönetilebilir görevlere böldüğümüz gibi programlamada da fonksiyonları benzer bir mantıkta kullanmaktayız.
“Peki, programlamada fonksiyon kavramı niye bu kadar önemli?” Önemli, çünkü programı daha düzenli, anlaşılabilir ve yönetilebilir kılar, hata ayıklamayı kolaylaştırdığı gibi kodun bakımını ve tekrar kullanılabilirliğini sağlar.
Kod bloklarını bağımsız modüller halinde düzenleyerek, belirli görevleri yerine getirmesi için oluşturulmuş bağımsız kod bloklarına dönüştürür. Bu, bir yandan kodun daha anlaşılabilir ve yönetilebilir olmasını sağlarken, diğer yandan da belirli bir işlevi gerçekleştiren fonksiyonların, başka programlarda da kullanılabilmesine olanak tanır. Bu nedenlerle, fonksiyonlar programlamada büyük bir öneme sahiptir.
Python’da Fonksiyonların Kullanımı
C, C++, Java, C# gibi diğer programlama dillerine hakim olanlar, Python‘da da fonksiyonların kullanım mantığına da aşina olacaklardır. En basitinden “print ()“, “type ()” gibi ifadeleri kullanmışsanız fonksiyonlardan yararlanmışsınızdır diyebiliriz.
Python’da gömülü (built-in) halde bulunan bu yapılar aslında fonksiyonların kullanım mantığı hakkında ipuçları verirler. Zira buna benzer yapılar Python geliştiricileri tarafından önceden tanımlanıp dile gömülü halde hizmetimize sunulmuş fonksiyonlardır.
Nasıl ki, karmaşık işlemleri gömülü fonksiyonlar ile kolayca yapabiliyorsak programlamacı olarak bizler de kendi sorunlarımıza çözüm bulmak adına kendi fonksiyonlarımızı tanımlayıp kullanabiliriz.
Python’da bir fonksiyonu tanımlamak için def
anahtar kelimesi kullanılır. Bu kelime, İngilizcedeki “define” (tanımlamak) kelimesinden türetilmiştir ve Python yorumlayıcısına bir fonksiyon tanımı yapıldığını belirtir.
Sıra geldi Python’da bir fonksiyon tanımladığımızda bilmemiz gereken diğer fonksiyon elemanlarına. Başlayalım:
Python Fonksiyon Elemanları
Python’da bir fonksiyonun tanımı aşağıdakileri içerir:
- Fonksiyon Adı: Bu, fonksiyonunuzun adıdır ve fonksiyonunuzu çağırırken kullanılır. İyi bir uygulama, fonksiyon adının, fonksiyonun ne yaptığını açıkça belirtmelidir. Örneğin, bir sayının faktöriyelini hesaplayan bir fonksiyon için uygun bir ad
faktoriyel_hesapla
olabilir. - Parametreler: Bunlar, fonksiyonun alacağı girdilerdir. Fonksiyon tanımında parantez içinde listelenirler ve virgülle ayrılırlar. Fonksiyonun gövdesinde bu parametreler, normal değişkenler gibi kullanılır.
- Fonksiyonun Gövdesi: Bu, fonksiyonun gerçekleştireceği işlemleri içerir. Python’da, fonksiyonun gövdesi girintili (indentation) olmalıdır, yani fonksiyon gövdesindeki her satır,
def
satırından daha fazla boşluk veya sekme içermelidir. - Return Değeri: Bu, fonksiyonun döndürdüğü değerdir.
return
anahtar kelimesi kullanılarak belirtilir. Bir fonksiyon, herhangi bir değer döndürmeyebilir (bu durumda, fonksiyonNone
döndürür), bir değer döndürebilir, veya birden fazla değer döndürebilir (bu durumda, değerler bir tuple içinde döndürülür).
Bu elemanlar, bir Python fonksiyonunun temel bileşenleridir ve bir fonksiyon tanımlarken düşünülmesi gereken ana noktalardır. Basit bir toplama işlemi üzerinden inceleyelim:
def topla(a, b): # 'topla' adında bir fonksiyon tanımlanıyor ve bu fonksiyon 'a' ve 'b' adında iki parametre alıyor.
sonuc = a + b # Fonksiyonun gövdesi. 'a' ve 'b' parametrelerinin toplamı 'sonuc' adlı değişkene atanıyor.
return sonuc # 'sonuc' değişkeninin değeri döndürülüyor.
toplam = topla(3, 4) # 'topla' fonksiyonu çağrılıyor ve döndürülen değer 'toplam' adlı değişkene atanıyor.
print(toplam) # 'toplam' değişkeninin değeri yazdırılıyor.
Python Fonksiyon Tanımlama
Python’da fonksiyon tanımlarken def komutu kullanılmaktadır. Aşağıdaki örneği inceleyin:
#fonksiyon tanımlama
def selamla(isim):
"""
Bu fonksiyon verilen isme selam verir.
"""
print("Merhaba, " + isim + "!")
Bu örnekte, selamla
adında bir fonksiyon tanımlanmıştır. Bu fonksiyon, bir isim
parametresi alır ve ekrana bir selam mesajı yazdırır. def
anahtar kelimesi, yeni bir fonksiyon tanımlamak için kullanılır. Bu fonksiyonun gövdesi, fonksiyonun yapacağı işlemleri içerir. Bu örnekte, gövde sadece bir print
ifadesinden oluşur. Ayrıca, fonksiyonun ne yaptığına dair bir açıklama içeren bir docstring de eklenmiştir.
Yukarıdaki örnekte de fark edileceği üzere fonksiyonumuzu tanımlamak için kullandığımız “def” komutundan sonra fonksiyonun adına yer verilir. Bu ad programcının kendi insiyatifine bırakılmıştır.
Fonksiyonumuzu “def” ile tanımlayıp gerekli adlandırmaya yaptıktan sonra da parantez açılır ve varsa parametre olarak bilinen veriler yazılır ve parantez kapatılır. Ardından çift nokta koyularak fonksiyon çağrıldığında çalışması istenen kodlar yazılmaya başlanır. Kod bloğu girintili (Indentation) bir şekilde yazılır.
Python’da kodlar, yukarıdan aşağıya doğru lineer bir şekilde okunur. Bu, en üstteki kodun solundan sağa ve ardından aşağıya doğru işlendiği anlamına gelir. Fonksiyonlarla ilgili önemli bir nokta, fonksiyonların çağrılmadıkça çalıştırılmayacağıdır. Yani, bir fonksiyon tanımlansa bile, çağrılmadıkça çalıştırılmaz.
Python Fonksiyon Çağırmak
Fonksiyon tanımlandıktan sonra, onu çağırmak için fonksiyon adını ve parantez içinde uygun bir argümanı yazmanız gerekir. Örneğin, selamla("Python")
şeklinde bir fonksiyon çağrısı yaparsanız, çıktı “Merhaba, Python!” olacaktır. Bakınız:
#fonksiyon tanımlama
def selamla(isim):
"""
Bu fonksiyon verilen isme selam verir.
"""
print("Merhaba, " + isim + "!")
# Fonksiyon çağırma
selamla("Python");
Python’da Fonksiyon Parametreleri Kullanımı
Fonksiyonlar, dışarıdan değer alabilirler, işte bu değerlere parametre denir. Parametreler, fonksiyonun işleyişini değiştirebilen değişkenlerdir. Fonksiyon tanımlanırken, fonksiyonun adından sonra parantez içinde belirtilirler. Parantez içindeki parametreler virgülle ayrılmak şartıyla istenilen sayıda kullanılabilmektedir. Aşağıdaki örneği inceleyiniz:
#fonksiyon parametresi
def selamla(isim):
print("Merhaba, " + isim + "!")
Yukarıdaki selamla
fonksiyonu, bir isim
parametresi alır. Fonksiyon çağrılırken, bu parametreye bir değer verilir. Örneğin, selamla("Python")
şeklinde çağrılmış bir fonksiyonun içinde argüman fonksiyona parametre olarak girer.
Yukarıdaki örnekte de görüleceği üzere fonksiyon içerisine tek bir parametre girilmiştir. Belirtmek gerekir ki fonksiyon çağrılırken kaç sayıda parametre belirtilmişse o sayıda olması beklenir ve sıralı bir şekilde eşleşir. Örneğin, eğer bir fonksiyon üç parametre ile oluşturulduysa, çağırırken de ne eksik ne de fazla yine üç parametre ile çağrılmaktadır. Bakınız:
#Parametre
def fonksiyon (ad, soyad):
print("Adınız: " + ad + ", Soyadınız: " + soyad)
fonksiyon("Brad", "Pitt")
Yukarıdaki örnekte, eğer fonksiyon çağrısı ikiden farklı sayıda argüman alsaydı, parametre sayısı ile eşleşmeyecek ve derleyici hata verecekti.
❗ Fonksiyon çağrılarında kullanılan değişenlere argüman denirken, fonksiyon tanımlarında kullanılan değişkenlere ise parametre denir. İkisi de temelde aynı şeydir, sadece kullanıldığı yer farklıdır ve aralarındaki farkı bilmek önemlidir.
- Fonksiyon tanımlamasında, fonksiyonun alacağı değerlerin isimleri belirtilir ve bunlara “parametre” denir.
- Fonksiyon çağrısında ise, bu parametrelere gerçek değerler atanır ve bu değerlere “argüman” denir.
def selamla(isim): # 'isim' burada bir parametredir
print("Merhaba, " + isim + "!")
selamla("Python") # 'Python' burada bir argümandır
Değişken Sayıda Parametre Alabilen Fonksiyonlar
Eğer fonksiyonun kaç parametre alacağı ile alakalı kesin bir bilgi yoksa parametre adından önce bir * eklemek kafi olacaktır. Bu şekilde fonksiyon bir dizi argüman alacak ve değişkenlere erişebilecektir:
# * işareti
def fonksiyon(*diller):
print("En kolay dil: " + diller [2])
fonksiyon("C++", "C", "Python")
Fonksiyonlarda Parametre Anahtarları Kullanmak
Parametreler, anahtar (key) = değer (value) şeklinde bir yapı ile pekala gönderilebilir. Böylesi durumlarda haliyle parametre sırası önemsiz olmaktadır. Bakınız:
# parametre eşleme
def fonksiyon(dil3, dil2, dil1):
print("En kolaay dil: " + dil3)
fonksiyon(dil1 = "C++", dil2 = "C", dil3 = "Python")
Varsayılan Parametre Değeri Belirtmek
Python fonksiyon için parametre kullanılmadığı zaman geçerli olacak bir başlangıç parametre değeri belirtilebilir. Örneğin:
# Başlangıç parametresi
def programlama (dil = "Python"):
print("Programlama Dili: " + dil)
programlama("C++")
programlama("C")
programlama()
programlama("C#")
Python Fonksiyonlarda “return” Kullanımı
Python’da return
ifadesi, bir fonksiyonun sonucunu döndürmek için kullanılır. Bir fonksiyon, belirli bir işlemin sonucunu döndürmek için return
anahtar kelimesini kullanır. Fonksiyonun işlemi tamamlandığında, return
ifadesi sonrasında belirtilen değer fonksiyonun çağrıldığı yere geri gönderilir. Bilmeniz gereken özellikleri aşağıda özetlenmiştir:
return
ifadesi kullanılmadan bir fonksiyon tanımlanırsa, o fonksiyonNone
döndürür.return
deyiminin kullandığı satırdan sonra gelen hiçbir kod çalışmaz.return
deyimi ile döndürülmüş bir fonksiyon başka bir değişkene atanabilir.
Peki, Python’da bir fonksiyon içinde herhangi bir veriyi ekrana basmak yerine return
deyimi yardımıyla döndürülmesinin ne gibi faydası var diye sorabilirsiniz. Aslında kısaca döndürülen değerin daha sonra başka ortamlarda da kullanabilmesi şeklinde özetleyebiliriz. Bu da haliyle fonksiyonların tekrar tekrar kullanılabilmesini sağlar.
#Python'da return kullanımı
def karesini_al(x):
return x * x
sayi1 = 5
sayi2 = 10
# karesini_al fonksiyonunu tekrar tekrar kullanma
karesi1 = karesini_al(sayi1)
karesi2 = karesini_al(sayi2)
print("5'in karesi:", karesi1)
print("10'un karesi:", karesi2)
Yukarıdaki örnekte, karesini_al
fonksiyonu, verilen bir sayının karesini döndürür. Bu fonksiyon, sayi1
ve sayi2
için tekrar tekrar kullanılır. Eğer fonksiyon, karenin sonucunu sadece yazdırsaydı, bu sonuç başka yerlerde kullanılamazdı. Ancak return
ifadesi sayesinde, fonksiyonun sonucu bir değişkene atanabilir ve bu değişken başka yerlerde de kullanılabilir. Bu, kodun daha düzenli ve yeniden kullanılabilir olmasını sağlar.