Hata Yakalama
13.1 Fonksiyonları Tanımlamak
Python’da fonksiyonları kullanabilmek için öncelikle fonksiyonlarıtanımlamamız gerekiyor.
Fonksiyon tanımlamak için def adlı bir parçacıktan yararlanaca˘gız. Python’da fonksiyonları
¸
söyle tanımlıyoruz:
def fonksiyon_adi():
...
Gördü˘günüz gibi, önce def parçacı˘gını, ardından da fonksiyonumuzun adını yazıyoruz.
Fonksiyon adı olarak istedi˘giniz her ¸seyi yazabilirsiniz. Ancak fonksiyon adı belirlerken, fonksiyonun ne i¸se yaradı˘gını anlatan kısa bir isim belirlemeniz hem sizin hem de kodlarınızı okuyan ki¸silerin i¸sini bir hayli kolayla¸stıracaktır. Yalnız fonksiyon adlarında Türkçe karakter kullanmamanız gerekiyor. Ayrıca fonksiyonları tanımlarken en sona parantez ve iki nokta üst üste i¸saretlerini de koymayı unutmuyoruz.
Böylece ilk fonksiyonumuzu tanımlamı¸s olduk. Ama henüz i¸simiz bitmedi. Bu fonksiyonun bir i¸se yarayabilmesi için bunun altını doldurmamız gerekiyor. Fonksiyon tanımının iki nokta üst üste i¸sareti ile bitmesinden, sonraki satırın girintili olması gerekti˘gini tahmin etmi¸ssinizdir.
Gelin isterseniz biz bu fonksiyonun altını çok basit bir ¸sekilde dolduralım:
def fonksiyon_adi():
print "merhaba fonksiyon!"
Böylece eksiksiz bir fonksiyon tanımlamı¸s olduk. Burada dikkat etmemiz gereken en önemli
¸
sey,def fonksiyon_adi(): satırından sonra gelen kısmın girintili yazılmasıdır.
¸
Simdi isterseniz bu fonksiyonu nasıl kullanabilece˘gimizi görelim:
#!/usr/bin/env python
# coding: utf-8 -*-def fonksiyon_adi():
print "merhaba fonksiyon!"
Bu kodları bir metin düzenleyiciye kaydedip çalı¸stırdı˘gımızda hiç bir çıktı elde edemeyiz.
Çünkü biz burada fonksiyonumuzu sadece tanımlamakla yetindik. Henüz bu fonksiyonun i¸sletilmesini sa˘glayacak kodu yazmadık. ¸Simdi bu fonksiyonun hayat kazanmasını sa˘glayacak kodları girebiliriz:
#!/usr/bin/env python
# coding: utf-8 -*-def fonksiyon_adi():
print "merhaba fonksiyon!"
fonksiyon_adi()
Burada fonksiyonun çalı¸smasını sa˘glayan ¸sey, en son satırdakifonksiyon_adi() kodudur. Bu satırı ekleyerek, daha önce tanımladı˘gımız fonksiyonu ça˘gırmı¸s oluyoruz. Bu satıra teknik olarak fonksiyon ça˘grısı (function call) adı verilir.
Yukarıdaki kodları çalı¸stırdı˘gımızda ekrana merhaba fonksiyon! satırının yazdırıldı˘gını görece˘giz.
Tebrikler! Böylece ilk eksiksiz fonksiyonunuzu hem tanımlamı¸s, hem de ça˘gırmı¸s oldunuz.
Dilerseniz, bu konunun en ba¸sında verdi˘gimiz dilekçe örne˘gini de bir fonksiyon haline getirelim:
19.12.2009 tarihinde yaptı˘gımız ba¸svurunun sonuçlandırılması hususunda yardımlarınızı rica ederiz.
Saygılarımızla, Orçun Kunek"""
dilekce_gonder()
Elbette bu örnek Python’daki fonksiyonların bütün yeteneklerini ortaya koymaktan aciz.
Üstelik bu fonksiyon, en ba¸sta bahsetti˘gimiz sorunları da çözemiyor henüz. Ama ne yapalım...
¸
Su ana kadar ö˘grendiklerimiz ancak bu kadarını yapmamıza müsaade ediyor. Biraz sonra ö˘greneceklerimiz sayesinde fonksiyonlarla çok daha faydalı ve manalı i¸sler yapabilece˘giz.
Yeni bir bölüme geçmeden önce isterseniz fonksiyonlarla ilgili olarak buraya kadar ö˘grendi˘gimiz kısmı biraz irdeleyelim:
1. Python’da fonksiyonlar bizi aynı ¸seyleri tekrar tekrar yazma zahmetinden kurtarır.
2. Fonksiyonlar bir bakıma bir taslaklama sistemi gibidir. Biraz sonra verece˘gimiz örneklerde bu durumu daha net olarak görece˘giz.
3. Python’da fonksiyonları kullanabilmek için öncelikle fonksiyonu tanımlamamız gerekir.
Bir fonksiyonu tanımlamak için def adlı parçacıktan yararlanıyoruz.
4. Python’da bir fonksiyon tanımı ¸söyle bir yapıya sahiptir:
def fonksiyon_adi():
...
5. Fonksiyon adlarını belirlerken Türkçe karakter kullanmıyoruz. Fonksiyonlarımıza verece˘gimiz adların olabildi˘gince betimleyici olması herkesin hayrınadır.
6. Elbette bir fonksiyonun i¸slevli olabilmesi için sadece tanımlanması yetmez. Ayrıca tanımladı˘gımız fonksiyonun bir de gövdesinin olması gerekir. Fonksiyon gövdesini
girintili olarak yazıyoruz. Dolayısıyla Python’da bir fonksiyon temel olarak iki kısımdan olu¸sur. ˙Ilk kısım fonksiyonun tanımlandı˘gı ba¸slık kısmı; ikinci kısım ise fonksiyonun içeri˘gini olu¸sturan gövde kısmıdır. Ba¸slık ve gövde dı¸sında kalan her ¸sey fonksiyonun da dı¸sındadır.
7. Bir fonksiyon, gövdedeki girintili kısmın bitti˘gi yerde biter. Örne˘gin ¸su bir fonksiyondur:
def selamla():
print "merhaba!"
print "nasılsın?"
Bu fonksiyondef selamla(): satırıyla ba¸slar,print "nasılsın?" satırıyla biter.
8. Fonksiyonların i¸slevli olabilmesi için bu fonksiyonlar tanımlandıktan sonra ça˘grılmalıdır.
Örne˘gin yukarıdaki fonksiyonu ¸söyle ça˘gırıyoruz:
def selamla():
print "merhaba!"
print "nasılsın?"
selamla()
Dedi˘gimiz gibi, bu fonksiyondef selamla(): satırıyla ba¸slar,print "nasılsın?" satırıyla biter. Fonksiyon ça˘grısı dedi˘gimizselamla() satırı bu fonksiyonun dı¸sındadır. Çünkü bu satır selamla()fonksiyonunun gövdesini olu¸sturan girintili kısmın dı¸sında yer alıyor.
E˘ger bu söylediklerimiz size biraz kafa karı¸stırıcı gelmi¸sse, hiç endi¸se etmenize gerek yok.
Tam olarak ne demek istedi˘gimizi biraz sonra gayet net bir ¸sekilde anlamanızı sa˘glayacak örnekler verece˘giz.
Dilerseniz bu bölümü kapatmadan önce fonksiyonlarla ilgili birkaç basit örnek daha yaparak bu konuya ısınmanızı sa˘glayalım:
#!/usr/bin/env python
# coding: utf-8 -*-def tek():
print "Girdi˘giniz sayı bir tek sayıdır!"
def cift():
print "Girdi˘giniz sayı bir çift sayıdır!"
sayi = raw_input("Lütfen bir sayı giriniz: ") if int(sayi) % 2 == 0:
cift() else:
tek()
Burada tek() ve cift() adlı iki fonksiyon tanımladık. tek() adlı fonksiyonun görevi ekrana Girdi˘giniz sayı bir tek sayıdır! çıktısı; cift() adlı fonksiyonun görevi ise Girdi˘giniz sayı bir çift sayıdır!çıktısı vermek.
Daha sonra Python’un raw_input() fonksiyonunu kullanarak kullanıcıdan bir sayı girmesini istiyoruz. Ardından da kullanıcı tarafından girilen bu sayının tek mi yoksa çift mi oldu˘gunu denetliyoruz. E˘ger sayı 2’ye tam olarak bölünüyorsa çifttir. Aksi halde bu sayı tektir.
Burada cift() ve tek() adlı fonksiyonları nasıl ça˘gırdı˘gımıza dikkat edin. E˘ger kullanıcının girdi˘gi sayı 2’ye tam olarak bölünüyorsa, yani bu sayı çiftse, daha önce tanımladı˘gımız cift()
adlı fonksiyon devreye girecektir. Yok, e˘ger kullanıcının verdi˘gi sayı 2’ye tam olarak bölünmüyorsa o zaman da tek() adlı fonksiyon devreye girer.
Bu kodlarda özellikle fonksiyonların nerede ba¸slayıp nerede bitti˘gine dikkat edin. Daha önce de dedi˘gimiz gibi, bir fonksiyon def parçacı˘gıyla ba¸slar, gövdesindeki girintili alanın sonuna kadar devam eder. Girintili alanın dı¸sında kalan bütün kodlar o fonksiyonun dı¸sındadır. Mesela yukarıdaki örnekte tek() ve cift() birbirinden ba˘gımsız iki fonksiyondur. Bu fonksiyonlardan sonra gelensayı de˘gi¸skeni de fonksiyon alanının dı¸sında yer alır.