Hatırlarsanız bir önceki bölümde şöyle bir fonksiyon tanımlamıştık:
Dikkat ederseniz burada return diye bir şey kullandık. Bu kelime Türkçede vermek, döndürmek, iade etmek gibi anlamlara gelir. Buna göre yukarıdaki fonksiyon a değişkenini döndürüyor... Peki bu ne demek? Açıklayalım:
Pythonda her fonksiyonun bir dönüş değeri vardır. Yani Pythondaki bütün fonksiyonlar bir değer döndürür. Burada döndürmekten kastımız: bir işlemin sonucu olarak ortaya çıkan değeri vermektir. Mesela, Bu fonksiyonun dönüş değeri bir karakter dizisidir. veya Bu fonksiyon bir karakter dizisi döndürür. dediğimiz zaman kastettiğimiz şey; bu fonksiyonun işletilmesi sonucu ortaya çıkan değerin bir karakter dizisi olduğudur. Örneğin yukarıdaki fonksiyon a adlı değişkeni döndürüyor ve bu a değişkeni bir tamsayı olduğu için, fonksiyonumuzun dönüş değeri bir tamsayıdır. Peki, fonksiyonlar bir değer döndürüyor da ne oluyor? Yani bir fonksiyonun herhangi bir değer döndürmesinin kime ne faydası var? İsterseniz bunu daha iyi anlayabilmek için yukarıdaki örneği bir de şöyle yazalım:
Burada herhangi bir değer döndürmüyoruz. Yaptığımız şey bir a değişkeni belirleyip, print deyimini kullanarak bunu ekrana bastırmaktan ibaret. Bu arada şunu da belirtelim: Her ne kadar biz bir fonksiyonda açık açık bir değer döndürmesek de o fonksiyon otomatik olarak bir değer döndürecektir. Herhangi bir değer döndürmediğimiz fonksiyonlar otomatik olarak None diye bir değer döndürür. Bunu şu şekilde test edebiliriz:
Yukarıdaki fonksiyonu şu şekilde çağıralım:
Fonksiyonu bu şekilde çağırdığımızda şöyle bir çıktı aldığımızı göreceksiniz:
İşte burada gördüğümüz None değeri, fonk() adlı fonksiyonumuzun otomatik olarak döndürdüğü değerdir.
Yukarıdaki fonksiyonu print olmadan da çağırabileceğimizi biliyorsunuz:
Bu defa a değişkeninin değeri ekrana dökülecek, ancak None değerini göremeyeceğiz... Şimdi şu fonksiyona bakalım:
Burada ise ekranda herhangi bir çıktı göremeyiz. Bunun nedeni, bu fonksiyonda herhangi bir print işlemi yapmıyor olmamızdır. Biz burada sadece a değişkenini döndürmekle yetiniyoruz. Yani ekrana herhangi bir çıktı vermiyoruz. Bu fonksiyondan çıktı alabilmek için fonksiyonu şöyle çağırmamız gerekir:
Peki, bütün bu anlattıkların ne işe yarar? diye sorduğunuzu duyar gibiyim...
Bir defa şunu anlamamız lazım: print ve return aynı şeyler değildir. print deyimi bir mesajın ekrana basılmasını sağlar. return deyimi ise herhangi bir değerin döndürülmesinden sorumludur. Siz bir fonksiyondan bir değer döndürdükten sonra o değerle ne yapacağınız tamamen size kalmış. Eğer tanımladığınız bir fonksiyonda bir değer döndürmek yerine o değeri ekrana basarsanız (yani print deyimini kullanırsanız) fonksiyonun işlevini bir bakıma kısıtlamış olursunuz. Çünkü tanımladığınız bu fonksiyonun tek görevi bir değeri ekrana basmak olacaktır. Ama eğer o değeri ekrana basmak yerine döndürmeyi tercih ederseniz, fonksiyonu hem ekranda bir mesaj göstermek için hem de başka işler için kullanabilirsiniz. Bunu anlayabilmek için şöyle bir örnek verelim:
Bu kodları çalıştırdığımızda şöyle bir çıktı alırız:
Görüyorsunuz, işler hiç de istediğimiz gibi gitmedi. Halbuki biz a değişkeninin değeri: 5 gibi bir çıktı alacağımızı zannediyorduk... Daha önce de dediğimiz gibi, bir fonksiyondan herhangi bir değer döndürmediğimizde otomatik olarak None değeri döndürüldüğü için çıktıda bu değeri görüyoruz. Ama eğer yukarıdaki fonksiyonu şu şekilde tanımlasaydık işimiz daha kolay olurdu:
Gördüğünüz gibi, bu defa istediğimiz çıktıyı aldık. Bir de şu örneğe bakın:
Burada sayi_isle() adlı fonksiyonda kullanıcıya bir sayı sorup bu sayıyı döndürüyoruz. Daha sonra fonksiyonu çağırırken, bu döndürdümüz değerle istediğimiz işlemi yapabiliyoruz. İsterseniz bu fonksiyonu bir de return yerine print ile tanımlamayı deneyin. O zaman ne demek istediğimi gayet net bir biçimde anlayacaksınız..
Kod:
def fonk(): a = 5 return a
Dikkat ederseniz burada return diye bir şey kullandık. Bu kelime Türkçede vermek, döndürmek, iade etmek gibi anlamlara gelir. Buna göre yukarıdaki fonksiyon a değişkenini döndürüyor... Peki bu ne demek? Açıklayalım:
Pythonda her fonksiyonun bir dönüş değeri vardır. Yani Pythondaki bütün fonksiyonlar bir değer döndürür. Burada döndürmekten kastımız: bir işlemin sonucu olarak ortaya çıkan değeri vermektir. Mesela, Bu fonksiyonun dönüş değeri bir karakter dizisidir. veya Bu fonksiyon bir karakter dizisi döndürür. dediğimiz zaman kastettiğimiz şey; bu fonksiyonun işletilmesi sonucu ortaya çıkan değerin bir karakter dizisi olduğudur. Örneğin yukarıdaki fonksiyon a adlı değişkeni döndürüyor ve bu a değişkeni bir tamsayı olduğu için, fonksiyonumuzun dönüş değeri bir tamsayıdır. Peki, fonksiyonlar bir değer döndürüyor da ne oluyor? Yani bir fonksiyonun herhangi bir değer döndürmesinin kime ne faydası var? İsterseniz bunu daha iyi anlayabilmek için yukarıdaki örneği bir de şöyle yazalım:
Kod:
def fonk(): a = 5 print a
Burada herhangi bir değer döndürmüyoruz. Yaptığımız şey bir a değişkeni belirleyip, print deyimini kullanarak bunu ekrana bastırmaktan ibaret. Bu arada şunu da belirtelim: Her ne kadar biz bir fonksiyonda açık açık bir değer döndürmesek de o fonksiyon otomatik olarak bir değer döndürecektir. Herhangi bir değer döndürmediğimiz fonksiyonlar otomatik olarak None diye bir değer döndürür. Bunu şu şekilde test edebiliriz:
Yukarıdaki fonksiyonu şu şekilde çağıralım:
Kod:
print fonk()
Fonksiyonu bu şekilde çağırdığımızda şöyle bir çıktı aldığımızı göreceksiniz:
Kod:
5 None
İşte burada gördüğümüz None değeri, fonk() adlı fonksiyonumuzun otomatik olarak döndürdüğü değerdir.
Yukarıdaki fonksiyonu print olmadan da çağırabileceğimizi biliyorsunuz:
Kod:
fonk()
Bu defa a değişkeninin değeri ekrana dökülecek, ancak None değerini göremeyeceğiz... Şimdi şu fonksiyona bakalım:
Kod:
def fonk(): a = 5 return a fonk()
Burada ise ekranda herhangi bir çıktı göremeyiz. Bunun nedeni, bu fonksiyonda herhangi bir print işlemi yapmıyor olmamızdır. Biz burada sadece a değişkenini döndürmekle yetiniyoruz. Yani ekrana herhangi bir çıktı vermiyoruz. Bu fonksiyondan çıktı alabilmek için fonksiyonu şöyle çağırmamız gerekir:
Kod:
print fonk()
Peki, bütün bu anlattıkların ne işe yarar? diye sorduğunuzu duyar gibiyim...
Bir defa şunu anlamamız lazım: print ve return aynı şeyler değildir. print deyimi bir mesajın ekrana basılmasını sağlar. return deyimi ise herhangi bir değerin döndürülmesinden sorumludur. Siz bir fonksiyondan bir değer döndürdükten sonra o değerle ne yapacağınız tamamen size kalmış. Eğer tanımladığınız bir fonksiyonda bir değer döndürmek yerine o değeri ekrana basarsanız (yani print deyimini kullanırsanız) fonksiyonun işlevini bir bakıma kısıtlamış olursunuz. Çünkü tanımladığınız bu fonksiyonun tek görevi bir değeri ekrana basmak olacaktır. Ama eğer o değeri ekrana basmak yerine döndürmeyi tercih ederseniz, fonksiyonu hem ekranda bir mesaj göstermek için hem de başka işler için kullanabilirsiniz. Bunu anlayabilmek için şöyle bir örnek verelim:
Kod:
#!/usr/bin/env python # -*- coding: utf-8 -*- def ekrana_bas(): a = 5 print a print "a değişkeninin değeri: %s" %ekrana_bas()
Bu kodları çalıştırdığımızda şöyle bir çıktı alırız:
Kod:
5 a değişkeninin değeri: None
Görüyorsunuz, işler hiç de istediğimiz gibi gitmedi. Halbuki biz a değişkeninin değeri: 5 gibi bir çıktı alacağımızı zannediyorduk... Daha önce de dediğimiz gibi, bir fonksiyondan herhangi bir değer döndürmediğimizde otomatik olarak None değeri döndürüldüğü için çıktıda bu değeri görüyoruz. Ama eğer yukarıdaki fonksiyonu şu şekilde tanımlasaydık işimiz daha kolay olurdu:
Kod:
#!/usr/bin/env python # -*- coding: utf-8 -*- def ekrana_bas(): a = 5 return a print "a değişkeninin değeri: %s" %ekrana_bas()
Gördüğünüz gibi, bu defa istediğimiz çıktıyı aldık. Bir de şu örneğe bakın:
Kod:
#!/usr/bin/env python # -*- coding: utf-8 -*- def sayi_isle(): sor = input("bir sayı girin: ") return sor sayi = sayi_isle() print "girdiğiniz sayı: %s" %sayi if sayi % 2 == 0: print "girdiğiniz sayı çifttir" else: print "girdiğiniz sayı tektir" print "girdiğiniz sayının karesi: %s" %sayi ** 2 print "girdiğiniz sayının küpü: %s" %sayi ** 3
Burada sayi_isle() adlı fonksiyonda kullanıcıya bir sayı sorup bu sayıyı döndürüyoruz. Daha sonra fonksiyonu çağırırken, bu döndürdümüz değerle istediğimiz işlemi yapabiliyoruz. İsterseniz bu fonksiyonu bir de return yerine print ile tanımlamayı deneyin. O zaman ne demek istediğimi gayet net bir biçimde anlayacaksınız..
