Veri Bilimi İçin Fonksiyonel Programlama-4

Mehmet Rizgic
6 min readJul 31, 2022

--

Fonksiyonlar

Fonksiyonlar programlama dillerinde tekrar eden veya fonksiyonel işlevleri toplu bir yapı ile yerine getirme görevi gören çok kullanışlı yapılardır. Örnek olarak şu ana kadar geliştirilen programlarda print() fonksiyonunun görevi içine girilen değerleri ekrana yazdırdırmasıdır.

Bu fonksiyonel yapı Python geliştiricileri tarafından bir defa yazılmış, ve biz program geliştiricileri olarak bu fonkiyonel yapıyı sıfırdan tekrar tekrar yazmak yerine, bu işlevi gören kodu tek bir defa yazarak görevi yerine getirebilmekteyiz. Fonksiyonlar programlama esnasında sadece 1 defa tanımlanmaktadır. İhtiyaç halinde ise fonksiyon ismi yazılarak ve gerekirse argümanları tanımlanarak tüm bu işlemler tek bir defa da yerine getirilmektedirler.

Python geliştiricileri tarafından python diline gömülen fonksiyonlara (print(),type() vs.) built-in function denilmektedir. Bizzat bireysel programcılar tarafından gelştirilen fonksiyonlara ise (user-defined functions) denmektedir. Bu fonksiyonların nasıl oluşturulduğunu aşağıda adım adım görelim.

Fonksiyonların Oluşturulması

Fonksiyon tanımlamanın yapısı şu şekildedir;

def fonksiyon_ismi(argüman1,argüman2.....):
# Fonksiyon bloğu
Yapılacak işlemlerin kod blokları
# Çıktı dönüşünün tanımlanması - İsteğe bağlı

Aşağıda yukarı ki yapıya örnek olarak bir toplama fonksiyonu yazalım.

Fonksiyonumuz tanımlandı. Ancak bir fonksiyonun sadece tanımlanmış olması, o fonksiyonun işlem yapacağı anlamına gelmemektedir. Fonksiyonlar ile işlem yapabilmemiz için onların python ile çağrılması gerekmektedir. Aşağıda bir fonksiyonun çağrılmasına göz atalım.

Çıktıdan da gördüğünüz üzere foksiyon içine gerekli argümanlar verilip fonksiyon çağrıldığında bize 5 değerini dönmüş oldu. Fonskiyon içine tanımlamış olduğumuz print() built-function aracılığı ile toplama işlemi yapıp bunu yazdırması emrini verdik. Ayrıca bu işlemleri genelleştirebilmek adına argümanlar kullandık. Argüman değerleri doğrultusunda hesaplanan çıktıyı aldık.

Yukarıda da açıkladığımız üzere fonksiyonun doğru çalışabilmesi için argümanlarının tam olarak girilmesi gereklidir. Aksi takdirde son yaptığımız deneme şeklinde hata alacaksınız. Peki ya argümansız fonksiyon yazdığımız durumlarda bu işlemler nasıl gerçekleşmektedir ?

Argüman tanımı yapılmadan tanımlanan fonksiyonları dikkate aldığımız da ise bu fonksiyonlar sadece kod bloğuna tanımlanmış işlevleri otomatik olarak yerine getiren nesneler haline dönüşmektedirler. Bunu daha açıklayıcı bir örnekle aşağıdaki şekilde irdeliyelim.

Görüldüğü gibi argümansız olarak tanımlanan fonksiyonlar sadece kendi içerisinde tanımlı işlemleri otomatik olarak yerine getiren nesneler haline dönüşmektedir. Bu fonksiyonlara argüman vermek istediğimizde tanımlı yapısının dışında bir işlem yapıyor olmamızdan dolayı tip hatası almaktayız.

Argümanlar

Bir önceki işlemde de gördüğümüz üzere argümansız fonksiyonlar, sadece kendi iç yapılarında tanımlı işelmleri otomatik olarak yerine getiren nesneler idi. Ancak veri bilimi ve iş analitiği dünyasında yapacağımız projeler kapsamında tanımlanacak olan fonksiyonların argümansız olarak tanımlanması, o fonksiyonların bizlere yeterli faydayı sağlayamamalarına neden olmaktadır.

Örnek vermek gerekir ise yukarıda yazmış olduğumuz isim yazdırma fonksiyonumuz dahi tek isim dışında bir isim yazdıramamaktadır. İşte buradan yola çıkarak fonksiyon tanımlar iken Argüman tanımı gerçekleştirir isek bu fonksiyona istediğimiz ismi yazdırabilme işlevi kazandırabilmekteyiz.

Toplama fonksiyonunu yukarıda ki bilgiler doğrultusunda güncelleyerek yeniden tanımlayalım.

Fonksiyonumuzun işlevinin ne olduğunun açıklamasını fonksiyona yedirerek tekrar tanımlama işlemi yapalım.

Fonksiyonel programlama kapsamında belli düzeyde maaş alan çalışanların aylık maaşlarına zam yapan bir fonksiyon yazalım.

Return

Return ifadesi bir fonksiyonun işlevini sonlandırmakla birlikte, o fonksiyonun çıktısının bir değer olarak döndürülebilmesini, ayrıca farklı bir analiz veya programda yeni bir girdi veya değer olarak kullanılabilmesini sağlamaktadır. Şu ana kadar gördüğümüz fonskiyonlarda çıktı print ifadesi ile ekrana yazdırılıyor idi.

Ancak print fonksiyonu bu değeri bize bir çıktı olarak göndermekten başka bir görev yürütmemekte idi. Ancak programlama dünyasında yapılan işlemlerin doğası gereği bir sürü program ve fonksiyon içe içe çalışma zorunluluğu veya ihtiyacı duyulabilmektedir.

Bu gibi nedenlerden dolayı bir işlev veya fonksiyon çıktısının diğer işlemlere bir değer veya çıktı olarak atanabilmesini sağlayan ifade return ifadesidir. return ifadesi işlev sonunda elde edilen değeri çağrıldığı yere bir değer olarak dönmesini sağlamaktadır.

Böylelikle bir fonksiyon sonucunda elde edilen çıktıyı bir değişken olarak saklayabilir, ayırca projenin devamı esnasında farklı bir işlevde değer olarak görev almasını sağlayabilmekteyiz.

En basit bir gösterimi baz aldığımız da bile görülmektedir ki çıktısı 6 olan bir fonksiyon değerini dahi basit bir çarpma işleminde kullanamamaktayız. Bunun sebebi ise 6 çıktısını veren fonksiyonun çıktı görevinin sadece ekrana yazdırma görevi ile sınırlı olmasından dolayıdır. Örnek olarak toplama fonksiyonunun çıktısı farklı bir işlem veya fonksiyonda kullanmak istediğimizde return ifadesi fonksiyon tanımı içerisinde aşağıdaki şekilde yer almalıdır.

Çıktıdan da görüldüğü üzere print fonksiyonu ile aynı işlevi gördüğünü görmekteyiz. Ancak şu an bu değeri farklı bir işlevin girdisi olarak kullanmamız da mümkündür.

Sonuçtan da görüldüğü üzere ilk olarak topla fonksiyonu return ifadesi tanımlandı ve ardından topla fonksiyonunun çıktısı bir değer olarak yeni bir değişkene atandı. Son olarak da bu değişken farklı bir işlev/fonksiyon da değer olarak tanımlanabildi.

Nihai olarak topla işlemi ile başladığımız işlemlerimizi bolme işlemi ile tamamladık. 3 işlem önce girilen değerleri ard arda kullanabilme ve değer olarak girmeyi sağladık.

Fonksiyonlarda Argümanların Kullanım Şekilleri

Yukarıda fonksiyon oluşturur iken fonksiyona argüman tanımlamanın ne kadar önemli olduğunu ele aldık. Fonksiyonlara argüman tanımlamanın elzem olduğu kadar bazı durumlarda bu argümanları varsayılan değerler olarak tanımlamak da bir o kadar gerekli hale gelebilmektedir. Argümanları varsayılan değer olarak tanımlama işlemi aşağıdaki şekilde yapılmaktadır.

Yukarıda ki işlemin tip hatası vermesinin sebebi en başta tanımlandığı şekilde fonksiyona argümanın girilmemesinden dolayıdır.
İşte bu sebepten dolayı bir analiz veya programın otomasyonel hale dönüştürülmesi noktasında fonksiyon içi bazı argümanların
varsayılan değer olarak atanması gerekmektedir.

profilbilgisi fonksiyonunda Ad Yok, Soyad Yok ve Yaş yok değerleri ön tanımlı argümanlar olarak tanımlandı. Böylelikle bu fonksiyona herhangi bir argüman tanımlanmaz ise karşılık geldikleri değerlere karşı bu ön tanımlı argümanlar dönecektir.

Fonksiyonlar da argüman tanımlama ile ayrıca ön tanımlı argüman tanımlamayı da ele almış olduk. Bir sonraki başlıkta ise işlem yükü düşük fonksiyonel işlevleri tek bir satırda yapmamıza olanak sağlayan lambda fonksiyonunu ele alacağız.

Lambda Fonksiyonu

Python’da lambda, tek satırlık fonksiyonlardır. Bir ya da daha fazla parametre kabul ederler, ancak tek bir işlem yapabilirler.

Aşağıdaki örnekte tanımlanan x fonksiyonu, parametrede belirtilen sayıya 10 ekler ve sonucu döndürür.

Lambda fonksiyonu Bir fonksiyon içinde kullanıldığı zaman o fonksiyonu kişiselleştirmemizi sağlar.

Yukardaki işlemi lambda ile tek satırda yapmamız mümkündür.

Veri Bilimi İçin Python-3 bölümüne bu linkten ulaşabilirsiniz. Serimizin bir sonraki bölümü olacak Veri Bilimi İçin Python-5' ede buradan ulaşabilirsiniz. Aynı zamanda yukarıdaki kod bloklarını hazır bir şekilde github hesabımdaki Yapay Öğrenme İle Veri Bilimi repostorimden indirmeyi ve github hesabımı takip etmeyi unutmayın :)

--

--