Python Öğreniyoruz Bölüm 2: Fonksiyonlar
Merhaba, SistersLab’in Toplum Gönüllüleri Vakfı tarafından desteklenen Women in Tech Academy proje katılımcılarından biriyim. Proje, 20–28 yaş aralığında beyanı kadın olan bireyleri 3 ay boyunca yazılım eğitimi ve destekleyici eğitimlerle güçlendirerek sektörde iş gücüne katılımını artırmayı hedefliyor. Projeyle ilgili detaylı bilgiye bu bağlantıdan ulaşabilirsiniz: https://sisterslab.co/women-in-tech-academy/
“Python Öğreniyoruz” adlı yazı serimiz ile size hafta hafta Python ile ilgili bilgiler yazacağımı söylemiş ve serinin ilk yazısında Python’a giriş yapıp veri yapıları, operatörler ve döngülerden bahsetmiştim. Eğer ilk yazıyı okumadıysanız buradan okuyabilirsiniz. Serimizin ikinci yazısı olan bu yazıda ise fonksiyonlar konusunu ele alacağım. Şimdiden hepinize keyifli ve verimli okumalar…
Fonksiyon Nedir ?
Programlamada belirli bir görevi yerine getirmek adına tanımlanan ve tekrar tekrar kullanabildiğimiz yapılara fonksiyon denmektedir. Sürekli olarak kullanacağımız kod satırlarını her seferinde yazmak yerine fonksiyon olarak tanımlayıp istediğimiz zaman çağırıp çalışmasını sağlayabiliriz. Böylece kodlarımız düzenli ve okunabilir olacaktır.
Fonksiyona basit bir örnek vermek gerekirse Python öğrenirken en baştan beri kullandığımız print() bir fonksiyon olup görevi içine yazılan değeri ekrana yazdırmaktır. print() fonksiyonu Python geliştiricileri tarafından yazılan ve hazır olarak kullanılan bir fonksiyondur. Bu şekilde bizim hazır olarak kullandığımız fonksiyonlara gömülü fonksiyon (built-in function) denmektedir. Kendi oluşturduğumuz fonksiyonlara ise kullanıcı tanımlı fonksiyon (user-defined function) denmektedir. Şimdi ise bu kullanıcı tanımlı fonksiyonların Python’da nasıl tanımlandığına bakalım.
Fonksiyon Tanımlama ve Çağırma
Python’da fonksiyon tanımlamak için def anahtar kelimesi kullanılır.
Python’da görevi ekrana “Hoş geldiniz! Bu benim ilk fonksiyonum” yazan bir fonksiyon tanımlayalım.
Fonksiyonları tanımladık, iyi güzel ama fonksiyonu çağırmadan ilgili fonksiyon görevini yerine getirmeyecektir. Fonksiyonları tanımladığımız isim ile birlikte parantez () kullarak çağırırız. Yukarıdaki fonksiyonun görevini yerine getirmesi için çağrılması gereklidir.
Fonksiyonlarda Parametre
Fonksiyonlar görevlerini yerine getirebilmek için parametreye ihtiyaç duyabilir. Örneğin iki sayının çarpımını hesaplayan carp(sayi1, sayi2) adında bir fonksiyon tanımladıysak fonksiyon içine iki farklı parametre alması gereklidir. Örnek kod bloğunu aşağıda bulabilirsiniz.
Fonksiyonlar tanımlanırken kullanıcının parametre girmemesi durumu için default parametre değer tanımlaması da yapılabilir. Demek istediğimizi bir örnek üzerinden açıklamaya çalışalım. Aşağıda tanımlanan kids() fonksiyonunda eğer schoolroom değeri girilmezse default olarak “1-E” olacaktır. Pelin için schoolroom “1-C” olarak girilmişken Berk için schoolroom değeri girilmediği için şubesi “1-E” olarak atanmıştır.
Peki fonksiyonlar en fazla kaç parametre alabilir ve bunu nasıl tanımlayabiliriz? İşte burada devreye *args girmektedir. Fonsiyonun kaç parametre alacağını bilmiyorsak ya da istediğimiz kadar parametre almasını istediğimiz durumlarda parametre adından önce bir tane yıldız * ekleyerek fonksiyonun sınırsız parametre almasını sağlarız.
Örnek olarak girilen sayıların çarpımını bulan çarp() fonksiyonunu aşağıdaki şekilde tanımladık. Burada fonksiyonun içine istenildiği kadar parametre alabilmesi için def çarp(*sayilar) şeklinde tanımlanarak girilen sayıların çarpımları ekrana yazdırılmıştır.
Buraya kadar fonksiyonların ürettiği sonuçları hep print() ile ekrana yazdırdık. Fonksiyonun sonucunda üretilen değeri bir değişkene atayıp başka bir işlemde kullanmak istersek nasıl bir yol izleyeceğiz ? İşte tam da burada devreye return() komutu girmektedir.
return ( )
return ifadesi fonksiyonun çağırıldığı yere değer götürmesi işlemini gerçekleştirmektedir. Örneğin iki sayıyı çarpan bir fonksiyon yaptıysanız return komutu ile bu iki sayının çarpımlarının sonucunu fonksiyonun çağrıldığı yere götürebilirsiniz.
Recursive fonksiyonlar
Recursion (özyineleme), fonksiyonların kendisini çağırmasıdır. Recursive anlaşılması güç konulardan biri olsa da aslında yaptığı iş zor ve uzun problemleri yinelemeli olarak adım adım çözmektir. Daha iyi anlayabilmek için faktöriyel hesaplama örneğine göz atalım.
Kod göründüğü üzere çok kısa ama karmaşık gelmiş olabilir fakat burada yapılan şey, fonksiyon kendi kendini ilk aldığı parametrenin 1 eksiği değerinde çağırmaktadır.
Fonksiyonu recursive fonksiyona deönüştüren kod satırı :(faktoriyel_hesapla (number -1))
Recursive fonksiyonların base case ve recursion olarak iki temel özelliği bulunmaktadır.
- Base case; recursive fonksiyonlardaki istenen temel koşul durumudur, yani recursion bu koşulda durur. Faktöriyel örneğimizde base case
if (number == 0): return 1
kısımdır.
- Recursion ise, fonksiyonun kendisini çağırdığı kısımdır. Faktöriyel örneğimizde
return number * factorial_hesapla(number — 1)
recursionın gerçekleştiği yerdir.
Fonksiyon Uygulamaları
Bu kısımda fonksiyon konusunun iyice oturması adına birkaç örneğe yer verelim.
Örnek 1 : Bir Sayının Mükemmel Olup Olmadığını Bulan Fonksiyon
Mükemmel sayı, kendisi hariç pozitif tam bölenlerinin toplamı kendisine eşit olan sayıdır. Örneğin 28 sayısının tam bölenlerine bakalım: 1, 2, 4, 7, 14 bu sayıların toplamı 28'e eşit olduğu için 28 mükemmel sayıdır.
Örnek 2 : Bir Sayının Rakamlar Toplamını Bulan Fonksiyon
Fonksiyon içine yazdığımız sayının rakamlarının toplamını bulan fonksiyon uygulaması yapalım. Örnek olarak girilen sayı 123 ise rakamlar toplamı 1+2+3 = 6 olacaktır.
Fonksiyon uygulamalarının sonu yok ve bildiğiniz gibi en güzel öğrenme yöntemi de deneyerek öğrenme yöntemi. Dilerseniz bu yazımdaki kodlarımı deneyerek değişiklikler yapabilirsiniz. Ek olarak akademi kapasamında fonksiyon uygulaması ile ilgili üç farklı oyun yazdık. Oyunlar ;
- 1) Bilgisayara 1–100 arasında random ( rastgele) bir sayı ürettirip bu sayıyı bilgisayarın yönlendirmeleriyle tahmin etmeye çalışıyoruz (link)
- 2) Bu sefer ise biz 1–100 arasında bir sayı tutup bilgisayarın bizim tutuğumuz sayıyı tahmin etmesini sağlıyoruz (link).
- 3) Üçüncü oyunumuz ise hepimizin küçüklükten beri oynadığı taş kağıt makas oyunu (link)
Oyunların kodlarını Github hesabıma ekledim, ayrıca yukarıda yazan “link” kısmında da bulabilirsiniz.
Son Söz ve Kapanış
“Python Öğreniyoruz” yazı serimizin ikincisi burada son bulmaktadır. Bu yazımda Python’da fonksiyonlar konusuna ele alarak fonksiyon tanımlama, çağırma, parametre gönderme, return ve recursive fonksiyonları inceledik. Ek olarak ise fonksiyon uygulamaları ile üç farklı oyunun github linkini ekledim. Umarım hepiniz için faydalı olmuştur.
Gelecek yazıya kadar kendinize cici bakın :)