7 - Fonksiyonlar
2024
def
anahtar kelimesini kullanırız.def sum(num1, num2):
"""İki sayıyı toplar ve sonucu döndürür."""
result = num1 + num2
return result
print(topla(5, 3))
print(topla(16, 7))
8
23
return
ifadesi ile belirtilir.return
ifadesi kullanılmazsa, fonksiyon None
değerini döndürür.def mutlak_deger(sayi):
"""Verilen sayının mutlak değerini döndürür."""
if sayi < 0:
return -sayi
else:
return sayi
sonuc = mutlak_deger(-10)
print(sonuc)
10
x = 10 # Global değişken x
def function():
x = 5 # Local değişken x
print("Fonksiyon içinde x: ", x)
function() # Fonksiyon çağrısı
print("Fonksiyon dışında x: ", x)
Fonksiyon içinde x: 5
Fonksiyon dışında x: 10
global
anahtar kelimesini kullanmalıyız.Warning
global
anahtar kelimesini dikkatli kullanın! Fonksiyonlar içinde global değişkenleri değiştirmek, kodun okunabilirliğini ve bakımını zorlaştırabilir ve beklenmedik sonuçlara yol açabilir. Mümkün olduğunca, fonksiyonların yan etkilerinden kaçınmak ve değerleri return
ifadesi ile döndürmek daha iyi bir uygulamadır.
x = 10 # global x
def fonksiyon():
global x
x = 20 # global x'i güncelle
print(x)
fonksiyon()
print(x)
10
20
nonlocal
anahtar kelimesini kullanabilir.def dis_fonksiyon():
a = 10
print(f"Dış fonksiyon içinde a: {a}")
def ic_fonksiyon():
nonlocal a
a = 20
print(f"İç fonksiyon içinde a: {a}")
ic_fonksiyon()
print(f"Dış fonksiyon içinde a: {a}")
dis_fonksiyon()
Dış fonksiyon içinde a: 10
İç fonksiyon içinde a: 20
Dış fonksiyon içinde a: 20
def selamla(isim="Kullanıcı"):
"""Verilen isimle bir selamlama mesajı yazdırır.
İsim verilmezse, "Kullanıcı" ismi kullanılır.
"""
print(f"Merhaba {isim}!")
selamla()
selamla("Ahmet")
Merhaba Kullanıcı!
Merhaba Ahmet!
def us_al(sayi, us=2):
"""Verilen sayıyı verilen üsse yükseltir.
Üs belirtilmezse, varsayılan olarak 2 kullanılır.
"""
return sayi ** us
print(us_al(3))
print(us_al(3, 3))
9
27
*args
ile değişken sayıda konumsal argüman,**kwargs
ile de değişken sayıda anahtar kelime argümanı alabiliriz.*args
def topla(*args):
"""Değişken sayıda sayıyı toplar."""
toplam = 0
for sayi in args:
toplam += sayi
return toplam
print(topla(1, 2))
print(topla(10, 20, 30, 40))
3
100
**kwargs
def ogrenci_bilgileri(**kwargs):
"""Öğrenci bilgilerini yazdırır."""
for anahtar, deger in kwargs.items():
print(f"{anahtar}: {deger}")
ogrenci_bilgileri(isim="Ahmet", soyisim="Yılmaz", numara=12345)
isim: Ahmet
soyisim: Yılmaz
numara: 12345
Pozisyonel argümandan sonra anahtar argüman yazılmamalıdır.
25
cift_mi = lambda x: x%2 == 0
topla = lambda x, y: x + y
print(cift_mi(6))
print(cift_mi(5))
print(topla(3, 5))
True
False
8
Warning
Karmaşık İşlemler: Eğer fonksiyonunuzda birden fazla ifade veya döngü varsa, lambda fonksiyonu kullanmak kodun okunabilirliğini azaltabilir. Bu durumlarda normal fonksiyon tanımını kullanmak daha iyidir.
Yan Etkiler: Lambda fonksiyonları, genellikle sadece bir ifadeyi hesaplayıp döndürdükleri için yan etkiler (global değişkenleri değiştirmek, dosya işlemleri yapmak gibi) yaratmak için uygun değildir. Eğer fonksiyonunuzun yan etkileri olması gerekiyorsa, normal def
ile fonksiyon tanımını kullanmalısınız.
Özetle, lambda fonksiyonları, kısa ve basit fonksiyonları tek satırda tanımlamak için kullanışlı bir araçtır. Ancak, karmaşık fonksiyonlar veya yan etkiler gerektiren durumlarda normal fonksiyon tanımını kullanmak daha uygun olacaktır.
pass
İfadesipass
ifadesi, Python’da hiçbir şey yapmayan bir ifadedir.Warning
Özyineli fonksiyon yazarken dikkatli olun! Eğer temel durumu doğru bir şekilde tanımlamazsanız, fonksiyon sonsuz döngüye girebilir ve programınız çökebilir.
Temel Durum (Base Case): Her özyineli fonksiyonun, özyinelemenin durduğu bir temel durumu olmalıdır. Temel durum, problemin en küçük ve çözümü bilinen halidir.
Özyineli Adım (Recursive Step): Temel duruma ulaşılmadığı sürece, fonksiyon kendini daha küçük bir girdiyle tekrar çağırır. Her çağrıda, problem daha da basitleştirilir.
faktoriyel(5)
çağrısı nasıl çalışır?
faktoriyel(5)
çağrılır. 5, 0’a eşit olmadığı için else
bloğuna girilir.faktoriyel(5) = 5 * faktoriyel(4)
olarak hesaplanır.faktoriyel(4) = 4 * faktoriyel(3)
olarak hesaplanır.faktoriyel(1)
ve faktoriyel(0)
’a kadar devam eder.faktoriyel(0)
’ın değeri 1’dir.faktoriyel(1) = 1
faktoriyel(2) = 2 * faktoriyel(1) = 2 * 1 = 2
faktoriyel(3) = 3 * faktoriyel(2) = 3 * 2 = 6
faktoriyel(4) = 4 * faktoriyel(3) = 4 * 6 = 24
faktoriyel(5) = 5 * faktoriyel(4) = 5 * 24 = 120
Fibonacci dizisi
1, 1, 2, 3, 5, 8, 13, 21, 34, ...
fibonacci(6)
çağrısı nasıl çalışır?
fibonacci(6)
çağrılır. 6, 1’den küçük olmadığı için else
bloğuna girilir.fibonacci(6) = fibonacci(5) + fibonacci(4)
olarak hesaplanır.fibonacci(5) = fibonacci(4) + fibonacci(3)
olarak hesaplanır.fibonacci(1)
ve fibonacci(2)
’ye kadar devam eder.fibonacci(1)
ve fibonacci(2)
’nin değerleri sırasıyla 1 ve 1’dir.fibonacci(2) = fibonacci(1) + fibonacci(0) = 1 + 0 = 1
fibonacci(3) = fibonacci(2) + fibonacci(1) = 1 + 1 = 2
fibonacci(4) = fibonacci(3) + fibonacci(2) = 2 + 1 = 3
fibonacci(5) = fibonacci(4) + fibonacci(3) = 3 + 2 = 5
fibonacci(6) = fibonacci(5) + fibonacci(4) = 5 + 3 = 8