Değişkenler tanımladığımız gibi, birden fazla veri veya değişkeni kullanarak belirli işlemler yapıp sonucu döndüren fonksiyonlar da tanımlayabiliriz.
Fonksiyon taımlamak için söz dizim aşağıdaki örnekte belirtildiği gibidir. def
kelimesiyle başlayan satırda fonksiyon_ismi(değişkenler)
biçiminde bağımlı ve bağımsız değişkenler belirtilir. İki nokta üst üste konulduktan sonra bir alt saturdan bir tab kadar boşluk girintisi içinde komutlar belirtilir. Girintisiz bir satıra rastlayıncaya kadar python komutları ilgili fonksiyon tanımı olarak kabul eder. Veya herhangi bir satırda return
ifadesi ile karşılaşınca python return ifadsei ile belirtilen veriyi çıktı olarak döndürür.
def final_hesapla(vize):
final_notu = (60 - 0.4 * vize) / 0.6
return final_notu
Yukarıdaki kodlarla final_hesapla
adında bir fonksiyon tanımladık, vize notunu verdiğimiz zaman dersi geçebilmek için finalden alınması gereken minimum notu hesaplayıp çıktı olarak geri veriyor. Bundan sonra programımızın herhangi bir yerinde böyle bir işlem yapmak istersek işlemleri tekrar etmemize gerek yok, fonksiyon ismiyle çağırarak işlemleri yapabiliriz:
final_hesapla(45)
Return ifadesi etmeden de fonksiyonlar tanımlanabilir, böyle fonksiyınlar veriyi geri döndürmez, bundan dolayı çıktı fonksiyon içinde işlenmelidir. Örneğin:
def final_goster(vize):
final_notu = (60 - 0.4 * vize) / 0.6
print final_notu
Bu fonksiyonu çalıştırdğımızda print ifadesi ile not yazılır.
final_goster(45)
Bununla aşağıdaki aynı şekilde çalışır:
print final_hesapla(45)
Şimdi başka bir örnek üzerinde çalışalım. Bir önceki derste while döngüsü kullanarak asallık testi yapmıştık, bu yöntemi kullanarak yeni bir fonksiyon tanımlayalım. Aşağıdaki fonksiyon verilen girdi sayısı asal ise True, asal değil ise False bool değerini döndürür.
def asaltest(sayi):
k = 2
while k < sayi and sayi%k != 0:
k += 1
return k == sayi
Örnek olarak bir kaç sayı deneyelim:
asaltest(13)
Aşağıdaki gibi bu fonksiyon yardımıyla verilen bir sayıya kadar olan tüm asalları listeleyebiliriz.
for i in range(100):
if asaltest(i):
print i
Bu asalları bir listede toplamak her zaman daha kullanışlı olur, aşağıdaki gibi boş bir liste oluşturup asal sayıları tek tek listeye ekleyebiliriz.
asalliste = []
for i in range(100):
if asaltest(i):
asalliste.append(i)
Listeyi yazdıralım.
print asalliste
Bu listeyi oluşturmanın daha kısa bir yolu var. Aşağıdaki kodu inceleyin, bu yönteme list comprehension denir.
print [i for i in range(100) if asaltest(i)]
Son olarak asaltest()
fonksiyonunu kullanan başka bir fonksiyon tanımlayalım.
def asalsayi():
giris = int(raw_input("Pozitif bir tamsayı girin > "))
if asaltest(giris):
print "Galiba %d bir asal sayı." % giris
else:
print "%d sayısı bir asal değil." % giris
print "Bu sayıya kadar olan asallar aşağıda:"
print [x for x in range(giris + 1) if asaltest(x)]
Bu programı istediğimiz zaman aşağıdaki biçimde çalıştırabiliriz artık.
asalsayi()