Süleyman ÖĞREKÇİ
suleymanogrekci.wordpress.com

Fonksiyonlar

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.

In [1]:
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:

In [2]:
final_hesapla(45)
Out[2]:
70.0

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:

In [3]:
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.

In [4]:
final_goster(45)
70.0

Bununla aşağıdaki aynı şekilde çalışır:

In [5]:
print final_hesapla(45)
70.0

Ş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.

In [6]:
def asaltest(sayi):
    k = 2
    while k < sayi and sayi%k != 0:
        k += 1
    return k == sayi

Örnek olarak bir kaç sayı deneyelim:

In [7]:
asaltest(13)
Out[7]:
True

Aşağıdaki gibi bu fonksiyon yardımıyla verilen bir sayıya kadar olan tüm asalları listeleyebiliriz.

In [8]:
for i in range(100):
    if asaltest(i):
        print i
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97

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.

In [9]:
asalliste = []
for i in range(100):
    if asaltest(i):
        asalliste.append(i)

Listeyi yazdıralım.

In [10]:
print asalliste
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

Bu listeyi oluşturmanın daha kısa bir yolu var. Aşağıdaki kodu inceleyin, bu yönteme list comprehension denir.

In [11]:
print [i for i in range(100) if asaltest(i)]
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

Son olarak asaltest() fonksiyonunu kullanan başka bir fonksiyon tanımlayalım.

In [12]:
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.

In [13]:
asalsayi()
Pozitif bir tamsayı girin >  173Galiba 173 bir asal sayı.
Bu sayıya kadar olan asallar aşağıda:
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173]