
Python fonksiyonları, tekrar kullanılabilir kod blokları oluşturmak için kullanılır. Bu rehberde fonksiyon tanımı, konumsal ve anahtar kelime parametreleri, varsayılan (default) parametreler, *args/**kwargs, lambda ifadeleri ile kapsama (scope) ve dönüş değerlerine ilişkin pratik örnekler sunulacaktır. Temel tanımlar için Python'un resmi belgelerine göz atabilirsiniz: Python Tutorial — Control Flow ve Python Reference — Compound statements.
Basit bir fonksiyon 'def' anahtar sözcüğüyle tanımlanır. Fonksiyon gövdesi girintili blok şeklindedir ve isteğe bağlı olarak return ile değer döndürür.
def add(a, b):
"""İki sayıyı toplar."""
return a + b
Çağırma örnekleri:
print(add(2, 3)) # 5
print(add(a=4, b=1)) # 5 (anahtar kelime argümanları)
Python fonksiyon parametreleri farklı şekillerde kullanılabilir:
Örnek:
def collect(*args, **kwargs):
print('positional:', args)
print('keywords:', kwargs)
collect(1, 2, x=3, y=4)
Fonksiyon tanımında parametreye bir değer atanırsa, o parametre çağrılmadığında varsayılan değer kullanılır. Bu kullanım sıkça tercih edilir, ancak dikkat edilmesi gereken bir durum vardır: mutable (ör. list, dict) nesneler varsayılan olarak paylaşılan tek bir nesne olarak kullanılabilir ve beklenmeyen birikimlere yol açabilir.
Doğru ve yanlış kullanım ayrımını görmek için örnek:
def greet(name, greeting='Merhaba'):
return f"{greeting}, {name}!"
print(greet('Ali')) # Merhaba, Ali!
print(greet('Ayşe', greeting='Selam')) # Selam, Ayşe!
Mutable default tuzağı:
def append_to(item, target=[]):
target.append(item)
return target
print(append_to(1)) # [1]
print(append_to(2)) # [1, 2] (aynı liste paylaşıldı)
Bu sorunu önlemek için genellikle None sentinel kullanılır:
def append_to(item, target=None):
if target is None:
target = []
target.append(item)
return target
Lambda ifadeleri tek bir ifadeyle tanımlanan anonim (isimsiz) fonksiyonlardır. Kısa, tek kullanımlık fonksiyonlar için uygundur. Resmi belgelerde lambda ifadelerinin tek bir ifadeyle sınırlı olduğu belirtilir ve fonksiyon nesnelerinin gerekli olduğu her yerde kullanılabilir.
# Sıralama için örnek
pairs = [('a', 3), ('b', 1), ('c', 2)]
sorted_pairs = sorted(pairs, key=lambda x: x[1])
print(sorted_pairs) # [('b', 1), ('c', 2), ('a', 3)]
Map/filter ile kullanımı:
squares = list(map(lambda x: x * x, range(5)))
evens = list(filter(lambda x: x % 2 == 0, range(10)))
Not: Daha okunaklı olan durumlarda list comprehension veya ayrı isimli fonksiyon tercih edilebilir.
Fonksiyon içinde tanımlanan değişkenler yerel (local) kapsamda olur. return ifadesi bir değer döndürür; eğer yoksa Python varsayılan olarak None döndürür. Bir fonksiyondan birden çok değer döndürmek için tuple döndürmek sıkça kullanılan yöntemdir.
def divmod_like(a, b):
quotient = a // b
remainder = a % b
return quotient, remainder
q, r = divmod_like(7, 3) # q=2, r=1
Nested (iç içe) fonksiyon örneği ve nonlocal kullanımı:
def counter():
count = 0
def inc():
nonlocal count
count += 1
return count
return inc
c = counter()
print(c()) # 1
print(c()) # 2
Nonlocal ve global değişken yönetimi hakkında daha fazla bilgi için Python referansına bakabilirsiniz: Compound statements.
def make_multiplier(n):
"""Verilen n ile çarpan oluşturur."""
return lambda x: x * n
doubler = make_multiplier(2)
print(doubler(5)) # 10
Bu yazıda Python fonksiyonlarının temel kullanımı, parametre çeşitleri, varsayılan değerler, lambda ifadeleri ve kapsam ile dönüş örnekleri gösterildi. Daha ayrıntılı ve sürüm odaklı açıklamalar için resmi belgelendirmeyi inceleyin: Python Tutorial ve Python Reference. Bu sayfalar, söz dizimi ve davranış hakkında resmi ve güncel bilgiyi sağlar.
İpuçları: örnekleri küçük parçalar halinde çalıştırarak davranışı gözlemleyin ve testler yazarak beklentilerinizi doğrulayın.
Yorumlar