Python Fonksiyonlar | Python Def Kullanımı

Python Fonksiyonlar | Python Def Kullanımı

Tarhi : 23-01-2022 10:43:28 | Yazar : ÇAĞLAR BOSTANCI

Merhaba, bu içerikte sizlerle Python’da fonksiyon yapılarını inceleyeceğiz.Daha önce bir yazılım diliyle uğraştıysanız ve fonksiyon yapısını biliyorsanız bu parağrafı geçebilirsiniz. Yeni başlayan ardaşlar için “Fonksiyon nedir?” sorusunu yanıtlayalım. Yazmış olduğunuz bir kodu program içersinde veya diğer projelerinizde kullanmanız gerekebilir. Yazılan kod yapısını tekrardan yazmak yerine bir kez fonsiyon haline getirdiğinizde bir iki adımda onca kodu tekrardan çalıştırabilirsiniz. Bu temel yapıs nedeniyle fonksiyonlar programcılıkta olmazsa olmazlardandır. Daha basit bir örnekle bir otomobil fabrikasında bazı makinaların bazı işleri sürekli olarak yapıyor olmasını fark etmişsinizdir. Bir demir sacın banda yerleştirilmesiyle başlayan bu üretim işlemi bu makinalar sayesinde daha hızlı ve çok sayıda araç üretmemizi sağlamaktadır. Bu fabrikadaki makinaların ne yapacağını ve nasıl yapacağını onlara birkez söylüyorsunuz ve olarda bıkmadan usanmadan sizin söylediklerinizi yaparak ürünü ortaya çıkarıyorlar. Bu hikayede fonksiyon yapsı ile ilişkili olan kısım oto harekatları yapan makinaların bir serfer programlanıyor olup daha sonraki araç üretimlerinde sürekli aynı şekilde çalışıyor olmalarıdır. Bizde bir fonksiyon tanımlaması yaparak sürekli yapacağımız işleri tek satırda binlerce kodu çalıştıracağız.

Şimdi sizlerle bir fonksiyon tanımlayalım.

Yukarıda bir kez def ile yaz fonsiyonunu tanımladık. Bu fonksiyonda yapılması gereken kodları bir satır içeri girerek yazdık. Tekrar fonksiyonumuzun çalışmasını için yaz() fonksiyonunu tekrardan çağırdık. Artık programın her hangi bir yerinde yaz() fonksiyonunu çağırdığımızda ekrana bir selamlama mesajı verecektir

Şimdide bir ürünün kdvli fiyatını hesaplayan kodu yazalım.

Yukarıdaki örnekte 100 liralık bir ürünün 0.18 kdv oranı ile hesaplamasını yaptık. Peki bütün ürünlerimiz 100 lira mı? Hayır. Tabi vergi oranlarıda bazı ürünlere göre değişmektedir. İşte bu gibi durumların önüne geçmek için fonksiyonumuza dışarıdan parametre gönderelim. Yani fiyatı ve kdv oranını verelim o bize hesaplamayı yapsın.

Yukarıdaki örnekte kdv(fiyat,kdv) fonksiyonumuza iki tane değişken tanımladık ve bunları bir birinden ayrımak için “,” virgül kullandık. Bu sayede istediğimiz fiyatın, belirlenen kdv oranında hesaplanıp ekrana çıktı vermesini sağladık.

Programı yazarken daha da işleri kolaylaştırmak için bazen varsayılan değerler vermemiz gereke bilir. Örneğin temel gıdalarda 0.8 vergi oranı kullanılırken özel tüketim ürünlerinde 0.18 vergi oranı kullanılmaktadır. Biz fonksiyonumuza varsayılan olarak 0.08 değerini tanımlayalım ve istediğimizde o oranı değiştirelim.

Yukarıdaki öreneğimizde kdv fonksiyonumuzun ikinci parametresine varsayılan olarak 0.08 kdv değerini tanımladık. Bu sayede kdv(100) şeklinde tek parametre vererek çağırdığımızda varsayılan kdv oranı olan 0.08 üzerinden hesaplayacaktır. Yine ikinci örneğimizde ise kdv oranını 0.18 olarak belirledik.

Program yazarken bazen fonsiyonlara parametre göndermeyi unutuyoruz. Bu gibi durumlarda sistem ölümcül hatalar vermektedir. Bunların önüne geçmek için parametre varsayılanı olarak None değeri ataması yaparak değer kontrolü yapabilir ve kullanıcıya uyarı mesajı verebiliriz.

Yukarıdaki örnekte ilk kdv fonksiyonu çağırımında bir parametre göndermedik ve sistem bize bir mesaj yazdı. Daha sonra kdv fonksiyonuna parametre gönderimi sağladık ve bu sayede fonksiyon sorunsuz çalıştır. Burda dikkat edilmesi gereken husus sistemin ilk fonsiyon kullanımında ölümcül hatay düşmeyip ikinci fonksiyonu çalıştırabiliyor olmasıdır.

Tabi müşteriler bir mağzadan bir tane ürün almıyor. Yani birden fazla ürünün kdv oranını hesaplamamız gerekebilir. Şimdi kaç adet olduğunu bilmeden gönderdiğmiz ürün fiyatlarını kdv’li fiyatların hesaplatalım.

Burda dikkat edilmesi gereken husus kdv(*fiyat,kdv=0.08) fonksiyonu tanımlanırken “*fiyat” parametresinde kullanılan * işaretidir. Bu 256 adede kadar parametre gönderebileceğimiz anlamına gelir. Bizde ilk örnektede üç adet ürün fiyatı gönderiyoruz ve var sayılan kdv oranı üzerinden hesaplatıyoruz. Sonraki örneğimizde ise parametre sayısını bir artırıyoruz ve yanı zamanda kdv=0.18 parametresine kdv oranını değiştirerek atıyoruz ve bu sayede son kdv oranından dört adet ürünün hesaplamasını yapıyoruz.

Fonksiyon tanımlamalarında bazen parametre isimlerinide dinamik olarak belirleyebilirsiniz. Aşağıdaki öreneği iyice inceleyelim.

Bu öreneğizde ana parametremizi **fiyat şeklinde tanımlıyoruz. Bu tanımlama aslında paramatre isimleri ile parametre değerlerini bize bir dizi olarak göndermektedir. Bizde bu listeyi istediğimiz gibi değerlentirmekteyiz.

Fonksiyonların diğer önemli bir özelliğide geriye değer göndermesidir. Yani şuana kadar yapmış olduğumuz fonksyonlarda işlem sonrası ekrana çıktı verdik. Bu çıktıyı fonksiyon içerisinde değilde fonksiyon işlemi bitidikten sonra ana kod bloğunda vermek istersek ne olacak? Aşağıdaki kodlamamız bu na bir örnek teşkil edecektir.

Yukarıdaki örnekte kdv() fonksiyonumuz içerisinde return kodu fonksiyon içerisinde hesaplamanın sonucunu geriye göndermiştir. Bu geriye gönderilen değeri print parametresiyle ekrana basmaktayız.

Fonksiyonlarda dikkat edilmesi gerekn diğer husus global değişkenlerdir. Fonsiyon dışında kullanılan değişkenlere global değişken denmektedir. Bu değişkenler fonksyion içerisinde rahatlıkla kullanılmaktadır.

Yukarıdaki örneğimizden de anlaşılacağı gibi fonksiyon dışında tanımlamış olduğumuz kdvOrani adlı değişkenimizi kdv() fonksiyonumuz içerisinde de kullanmış olduk.

Bazende fonsiyon içersindeki bir değişkeni fonksiyon dışında da kullamak isteye bilirsiniz. İşte bu gibi durumlarda yapmanız gereken fonsiyon içerisindeki değişkeni global degisken şeklinde tanımlamanız gerekmektedir.

Yukarıdaki örneğimizde kdv() fonksiyonu içerisinde kullanmış oldğumuz tutar değişkenini global olarak tanımlayarak fonsiyon dışında da kullanabildik.

Python Yield Kullanımı

Python yield, oluşturulan bir fonskiyondan geriye dönecek değerleri adım adım göndermek için kullanılır. Return değeri tek seferde değer dönerken yield bunun tam aksini yapar.

Yukarıda yapmış olduğumuz fonskiyonda return ilk döngüde çekilen sayıyı döndürdükten sonra işlem duruyor. Bunu birde yield ile yapalım.

Bu fonksiyon değerlerini adım adım döndürmesi için yield kullanıyoruz. Dönen değer ekrana bastığımızda generator bir değer basıyor. Liste mantığında önüne * işareti eklediğimizde değerlerimizi alıyoruz. Aşağıdaki örneği daha sade ve next() metodu ile yapalım.

Fonksiyonumuzu bir kere çalıştırıp sayi adında değişkenimize alıyoruz daha sonra next() metodu ile ekrana tek tek basıyoruz.

Python fonsiyonlar konusunda sizlerle paylacaklarım bu kadar. Faydalı olması umuduyla BAŞARILAR.