• Sonuç bulunamadı

Fonksiyonların Parametreleri

Genel Tekrar

10.2 Fonksiyonların Parametreleri

Bir önceki bölümde fonksiyonları parametrelerle birlikte kullanarak epey esnek sonuçlar elde edebilece˘gimizi görmü¸stük. Bu arada, bizim burada “parametre” olarak adlandırdı˘gımız ¸sey bazı yerlerde “argüman” olarak da kar¸sınıza çıkabilir. Bu iki terim özünde birbirinden farklı olsa da, ço˘gunlukla fonksiyonlar için birbiriyle e¸s anlamlı olarak kullanılmaktadır... Yani fonksiyonlar söz konusu oldu˘gunda “parametre” ve “argüman” aynı ¸seyi ifade eder. Peki “argüman” ile

“parametre” arasındaki fark nedir?

¸

Su örnekte “x” bir parametredir:

def fonk(x):

¸

Su örnekte ise “50” bir argümandır:

fonk(50)

Yani bir fonksiyonun tanımlanması sırasında, parantez içinde belirtilen de˘gi¸skenlere “parame-tre” adı verilirken, tanımlanan fonksiyonun ça˘grılması esnasında, bu de˘gi¸skenlere verilen

de˘gerlere ise “argüman” adı veriliyor. Dolayısıyla yukarıdaki fonksiyon hakkında ¸söyle bir cümle kurabiliriz:

“fonk” adlı fonksiyonun x parametresine argüman olarak 50 de˘gerini verdik...

Ancak “parametre” ile “argüman” arasındaki bu farklılık ço˘gu zaman gözardı edilir ve bu iki kavram ço˘gunlukla birbiriyle e¸s anlamlı olarak kullanılır.

Dedi˘gimiz gibi, bir önceki bölümde parametreleri temel olarak nasıl kullanabilece˘gimizi ö˘ gren-mi¸stik. Bu bölümde ise “parametre” kavramına biraz daha ayrıntılı olarak bakmaya çalı¸saca˘gız.

Önce ¸su çok basit fonksiyona bir bakalım:

def bas(kelime):

print("merhaba", kelime)

Buradabas() adlı bir fonksiyon tanımladık. Bu fonksiyon tek bir parametre alıyor. Fonksiyon-umuzda bu parametreyi bir karakter dizisi içinde kullanıyoruz. Bu fonksiyonu çalı¸stırdı˘gımızda, bas() fonksiyonuna argüman olarak verdi˘gimiz kelime “merhaba” karakter dizisi ile birlikte ekrana basılacaktır. Mesela bu fonksiyonu “istihza” argümanıyla ça˘gıralım:

bas("istihza")

Kodlarımız ¸söyle görünecek:

def bas(kelime):

print("merhaba", kelime)

bas("istihza")

Bu kodları bir dosyaya kaydedip çalı¸stırdı˘gımızda ¸söyle bir çıktı elde ederiz:

merhaba istihza

Gördü˘günüz gibi,bas() fonksiyonuna verdi˘gimiz “istihza” argümanı “merhaba” karakter dizisi ile birlikte ekrana basılıyor. Kodlarımızı biraz geli¸stirelim:

def bas(kelime):

print("merhaba", kelime) soru = input("adınız nedir? ") bas(soru)

Bu kodlar, “merhaba” karakter dizisi ile birlikte ekrana dökülecek kelimeyi do˘grudan kullanıcı-dan alıyor... Bu arada, yazdı˘gımız fonksiyonun nerede ba¸slayıp nerede bitti˘gine dikkat edelim.

“soru = input(....” satırı ve ondan sonraki kısım fonksiyonumuzun dı¸sında yer alıyor.

Dedi˘gimiz gibi,bas() fonksiyonu tek bir argüman alıyor. Dolayısıyla bu fonksiyonu argümansız olarak ça˘gıramayız:

def bas(kelime):

print("merhaba", kelime) soru = input("adınız nedir? ") bas()

E˘gerbas() fonksiyonunu bu ¸sekilde argümansız olarak yazıp çalı¸stırırsak a¸sa˘gıdakine benzer bir hata alırız:

TypeError: bas() takes exactly 1 positional argument (0 given)

Bu hata mesajı ¸söyle çevrilebilir: “TipHatası: bas() tamı tamına 1 adet sıralı argüman alır (0 verilmi¸s)”

Demek kibas() fonksiyonunu çalı¸stırabilmek için “1” adet argüman girmemiz gerekiyormu¸s...

Ne bir eksik, ne bir fazla... Bu arada hata mesajı içinde geçen “sıralı argüman” (positional argument) kavramından da biraz sonra bahsedece˘giz.

Fonksiyonlara istedi˘gimiz sayıda parametre verebiliriz. Ancak parametrelerimizi “makul”

sayıda tutmak, fonksiyonun hangi parametrelere ihtiyaç duydu˘gunu hatırlayabilmek açısından önemlidir:

def deneme(bir, iki, liste, ölçüt):

sonuç = bir * iki

if bir and iki != ölçüt:

liste.append(sonuç) else:

print("{0} ile çarpmaya izin vermiyoruz!".format(ölçüt)) print(liste)

Gördü˘günüz gibi, fonksiyonlara birden fazla parametre verebiliyoruz... Burada tanımladı˘gımız fonksiyon, “bir”, “iki”, “liste” ve “ölçüt” olmak üzere dört adet parametre alıyor. Yani bu fonksiyonu kullanabilmek için fonksiyonumuzu dört adet argüman ile ça˘gırmamız gerekiyor.

Fonksiyonumuzun içeri˘gine baktı˘gımız zaman ilk olarak ¸su satırı görüyoruz:

sonuç = bir * iki

Buna göre, deneme() adlı fonksiyondaki “bir” ve “iki” adlı parametreler birbiriyle çarpılıp

“sonuç” adlı de˘gi¸skeni olu¸sturacak. Ardından gelen satırda bir “if... else...” blo˘gu görüy-oruz. E˘ger “bir” ve “iki” parametrelerinin de˘geri “ölçüt” parametresinin de˘gerine e¸sit de˘gilse, bir önceki satırda belirledi˘gimiz “sonuç” adlı de˘gi¸skenin de˘gerini “liste” parametresine ekliy-oruz. Burada and adlı bool de˘gerinin anlamına dikkat edin. “sonuç” adlı de˘gi¸skenin listeye eklenebilmesi için hem “bir” de˘gerinin, hem de “iki” de˘gerinin “ölçüt”e e¸s olmaması gerekiyor.

Daha sonra else blo˘gunu tanımlıyoruz. Buna göre e˘ger “bir” ve “iki” parametrelerinden her-hangi birinin de˘geri “ölçüt”e e¸sitse, kullanıcıya “ölçüt ile çarpmaya izin vermiyoruz!” ¸seklinde bir uyarı gösteriyoruz. Son satırda ise “liste” adlı parametrenin de˘gerini ekrana basıyoruz...

¸

Simdi sıra geldi fonksiyonumuzu ça˘gırmaya:

ö˘geler = []

deneme(23, 5, ö˘geler, 4) Kodlarımızı topluca görelim:

def deneme(bir, iki, liste, ölçüt):

sonuç = bir * iki

if bir and iki != ölçüt:

liste.append(sonuç) else:

print("{0} ile çarpmaya izin vermiyoruz!".format(ölçüt)) print(liste)

ö˘geler = []

deneme(23, 5, ö˘geler, 4)

Burada öncelikle “ö˘geler” adlı bo¸s bir liste olu¸sturduk. Çünkü deneme() fonksiyonunun parametrelerinden birisi liste olmak zorunda... Ardından da deneme() fonksiyonunu ça˘ gırıy-oruz. Fonksiyonumuzu dört adet argüman ile ça˘gırdı˘gımıza dikkat edin. E˘ger argüman sayısı dörtten az veya fazla olursa programımız hata verecektir.

Bu kodları çalı¸stırdı˘gımızda ekrana, fonksiyon içinde belirtti˘gimiz listenin ö˘geleri basılacaktır.

Fonksiyonumuzu bir de ¸su argümanlarla ça˘gıralım:

def deneme(bir, iki, liste, ölçüt):

sonuç = bir * iki

if bir and iki != ölçüt:

liste.append(sonuç) else:

print("{0} ile çarpmaya izin vermiyoruz!".format(ölçüt)) print(liste)

ö˘geler = []

deneme(23, 5, ö˘geler, 5) Bu defa ¸söyle bir çıktı alıyoruz:

5 ile çarpmaya izin vermiyoruz!

[]

Bu çıktıyı almamızının sebebi “iki” adlı parametrenin de˘gerinin (5), “ölçüt” parametresinin de˘geriyle aynı olması (5). Fonksiyonumuz içinde böyle bir durum içinelse blo˘gunu yazmı¸s ve böyle bir duruma izin vermedi˘gimiz konusunda kullanıcıyı uyarmı¸stık...