Python ile Fonksiyonlar
Hayatlarımızı fonksiyonlaştırabilir miyiz? Aslına bakacak olursak bu sorunun cevabı çoğu zaman yaptığımız eylemlerde fark etmesek bile evet. Peki ama nasıl? Basit olarak 5 yaşından itibaren bisiklet sürmek istediğimizi düşünelim. Bisiklet sürmeye başlangıç olarak dört teker ile başlarız. Bisikleti kontrol edebilmeyi, dengede nasıl kalacağımızı öğrendiğimizde teker sayısını düşürerek en sonunda iki tekerle bisiklet kullanamaya devam ederiz. Çok güzel bisiklet sürmeyi öğrendik. Peki, bisiklet sürmek istediğimizde bu adımları tekrarlayacak mıyız? Hayır. İhtiyacımız olduğu zaman sadece bisiklete binip ilerliyoruz.
Şöyle düşünelim, beynimizde fark etmeden “bisiklet sürmek” adında bir fonksiyon tanımladık. Bu fonksiyon içerisine şartlar yerleştirdik; kontrol etmeyi öğrendiğimizde tek bir teker çıkartarak devam et, dengeyi sağlamayı öğrendiğimizde diğer tekeri de çıkart ve iki tekerle devam et. Başka bir zaman bisiklet sürmek istediğimizde bu fonksiyonu çağırıyoruz ki her seferinde aynı adımları tekrarlamayalım.
- Evet, şimdi bunu basit bir Python fonksiyonuna dönüştürelim.
fonksiyon_tanimla bisikletKullanmak():
teker_sayisi = 4
eğer kontrolü sağlayabiliyorsam:
teker_sayisi = teker_sayisi — 1
eğer dengeyi kurabiliyorsam:
teker_sayisi = teker_sayisi — 1
Python’da fonksiyonların temel mantığı aynı bu şekilde; üzerinde çalıştığımız bir uygulamada belirli kod parçalarını birkaç yerde kullanmak isteyebiliriz. Bu kod parçalarına ihtiyacımız olduğunda çağırır ve işlemlerimizi yaparız. Böylelikle yazdığımız kodlarda kendimizi tekrar etmez ve akış içerisinde kolaylık sağlamış oluruz. Python’da birçok hazır kütüphane bulunmakta. Bu kütüphanelerde önceden oluşturulmuş fonksiyonlar mevcut. Çoğu zaman fonksiyon tanımlamak yerine hazır bulunan fonksiyonları ihtiyaçlarımıza göre kullanacağız.
Fonksiyon Okuryazarlığı
Fonksiyonlar; parametreler, argümanlar, şartlar ve işlemlerden oluşuyor. Aslında şartlar ve işlemleri hallettik. Peki parametreler ve argümanlar nedir?
- Parametre: Fonksiyon tanımlanması esnasında ifade edilen değişkenlerdir.
- Argüman: Fonksiyonlar çağırıldığında parametre değerlerine karşılık girilen değerlerdir.
Python’da bulunan hazır fonksiyonların işlevlerini, parametrelerini nasıl kullanmamız gerektiğini bilmiyoruz. Bunun için ilgili kütüphanelerin, fonksiyonların dokümanlarını okumamız gerekiyor.
# help(functionName)
# ?functionName
--------------------
help(print)
Fonksiyon Tanımlama
Örneğin; üzerinde çalıştığımız uygulamada çarpma işlemine ihtiyacımız var ve bu işlemi fonksiyonlaştırmak istiyoruz.
def multiply(a, b):
print(a * b) # function statement/body bölümü
Burada ki ifadeyi açıklayacak olursak; “def” ibaresi Python’a ben fonksiyon tanımlayacağım; benim fonksiyonumun ismi “multiply”, fonksiyonumda kullanacağım parametreler a ve b değerleri. Fonksiyonun body bölümüne de yapacak olduğu işlemi yazarak fonksiyonumuzu tanımlamış oluyoruz.
Fonksiyon Çağırma
Kod akışında tanımladığım fonksiyona ihtiyacım oldu. Kullanmam gerekiyor, nasıl çağıracağım? Örneğin tanımladığımız “multiply” fonksiyonunu kullanalım. 3 rakamının 4 katını almak istiyoruz;
multiply(3, 4)
ifadesiyle fonksiyonumuzu çağırmış ve özelliklerini kullanmış oluyoruz.
Fonksiyon çıktısını girdi olarak nasıl kullanabiliriz?
Fonksiyonu çağırdığımızda elde ettiğimiz değeri bir değişkende saklamak, değerin üzerinde işlemler yapmak isteyebiliriz. Bunun için fonksiyon çıktısını girdi olarak kullanmamız gerekiyor. Bu ihtiyacımızı “return” ile karşılıyoruz.
def multiply(a, b):
c = a * b
return cx = multiply(3,4) # fonksiyon sonucunu x değişkenine atadık.
Artık x değişkenini istersek kod akışında başka bir işleme sokabiliriz.
Ön Tanımlı Parametreler
Fonksiyonlarımızı çağırdığımızda, tanımlarken kullandığımız parametrelere karşılık gelen değerlere atama yapmazsak hata alırız.
multiply(3)
Python, “3” değerini hangi değer ile çarpacağını bilmediğinden dolayı hata döndürecek. Bu gibi durumları engellemek için fonksiyon tanımlarken ön tanımlı parametreleri kullanabiliriz.
def multiply(a, b=1):
print(a * b)
Fonksiyona ön tanımlı “b = 1” parametresini ekledik. Fonksiyonu çağırdığımızda artık tek bir değer girersek o değeri 1 ile çarpacak.
Args (*args)
Değişken sayıda parametre vermenin bir yolu. En başta list/tuple gibi bir objemiz var ve bu objeyi tek tek elemanlarına ayırıp işlem yapıyor. Tanımladığımız fonksiyonun kaç parametre alacağı ile ilgili bir bilgiye sahip değilsek, bir veya birden fazla veriyi parametrelerden önce (*) koyarak değişken sayıda değer almasını sağlayabiliriz.
def toplam(*args):
sonuc = 0
print(type(args))
print(args)
for i in args:
sonuc += i
return sonuc
toplam(1,2,3,4,5,...)
Kwargs (**kwargs)
Tanımladığımız fonksiyona değişken sayıda keyword argument verebilmemizi sağlar.
def ogrenci(**ogrenci):
print(ogrenci)
for v in ogrenci:
print(v)
ogrenci(isim="Banu", ogrenciNum=402)