• Sonuç bulunamadı

Fonksiyonları Tanımlamak

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.