Python fonksiyonlarına hızlı giriş
Python fonksiyonları, belirli bir görevi yerine getiren tekrar kullanılabilir kod bloklarıdır. Fonksiyonlar kodu düzenler, tekrarı azaltır ve programın mantığını parçalara ayırarak okunabilirliği artırır. Resmi Python belgelendirmesi fonksiyon tanımlarını ve ilgili özellikleri açıklar: Python Tutorial — More Control Flow Tools.
Temel fonksiyon tanımı ve dönüşler
Bir fonksiyon 'def' anahtar kelimesiyle tanımlanır. İsteğe bağlı olarak docstring (belgeleme dizesi) eklenebilir ve 'return' ifadesi ile değer döndürülebilir. 'return' yoksa fonksiyon None döner.
Örnek 1 — Basit selamlama
def selamla(isim):
"""Girilen isimle Türkçe selamlama döndürür."""
return f"Merhaba, {isim}!"
print(selamla("Ayşe")) # Merhaba, Ayşe!
Birden fazla değer döndürmek
Fonksiyonlar birden fazla değeri virgülle ayırarak döndürebilir; Python bu değerleri otomatik olarak bir tuple içinde paketler.
def bolum_ve_kalan(a, b):
q = a // b
r = a % b
return q, r
q, r = bolum_ve_kalan(7, 3) # q = 2, r = 1
Parametre türleri ve örnekleri
Python, farklı çağrı stillerini destekler: konumsal (positional), anahtar kelime (keyword), varsayılan (default), değişken uzunlukta argümanlar (*args, **kwargs), anahtar-kelime-only ve konumsal-only parametreler.
Konumsal ve anahtar kelime argümanlar
def carp(a, b):
return a * b
carp(2, 3) # konumsal çağrı
carp(b=3, a=2) # anahtar kelime ile çağrı
Varsayılan değerler
Varsayılan argümanlar fonksiyon çağrılırken belirtilmezse kullanılır. Ancak varsayılan olarak değiştirilebilir bir nesne (ör. list) kullanmak, paylaşılan durumlara yol açabilir; yaygın çözüm None kullanıp içinde yeni bir nesne oluşturmaktır.
def ekle(item, items=None):
if items is None:
items = []
items.append(item)
return items
print(ekle(1)) # [1]
*args ve **kwargs: değişken sayıda argüman
*args pozisyonel, **kwargs anahtar kelime argümanlarını toplar:
def topla(*sayilar):
toplam = 0
for s in sayilar:
toplam += s
return toplam
print(topla(1, 2, 3)) # 6
def yazdir(**kwargs):
for k, v in kwargs.items():
print(f"{k} = {v}")
yazdir(ad="Ahmet", yas=30)
Anahtar-kelime-only parametreler
Fonksiyon imzasında '*' kullandığınızda, '*' sonrasında gelen parametreler yalnızca anahtar kelime ile verilebilir:
def kaydet(dosya, *, overwrite=False):
if overwrite:
print("Üzerine yazılıyor")
else:
print("Yeni kaydedilecek")
kaydet("rapor.txt", overwrite=True)
Konumsal-only parametreler ('/' kullanımı)
Python 3.8'de PEP 570 ile gelen '/' işareti, imza içindeki konumun solundaki parametreleri yalnızca konumsal olarak kullanmaya zorlar. Bu, fonksiyon arayüzünü netleştirmek için faydalıdır; detaylar için Python 3.8 duyurusu okunabilir: Python 3.8'daki Yenilikler.
Örnek:
def islemler(x, y, /, scale=1):
return (x + y) * scale
islemler(2, 3) # geçerli
islemler(x=2, y=3) # TypeError: x ve y yalnızca konumsal olmalı
İyi uygulamalar (checklist)
- Docstring: Her fonksiyon için kısa bir açıklama yazın.
- Tek sorumluluk: Fonksiyonlar tek bir işi yapacak şekilde küçük tutun.
- Parametre düzeni: Konumsal-only / normal / anahtar-kelime-only şeklinde tutarlı bir sıra kullanın.
- Varsayılan değerler: Değiştirilebilir nesneler için None kullanın ve fonksiyon içinde yeni nesne oluşturun.
- Tip ipuçları: Type hints, okunabilirliği ve araç desteğini artırır; zorunlu değildir.
- Basit testler: Fonksiyonlar için küçük assert testleri yazın.
Adım adım: küçük bir fonksiyon yazma ve test etme
- İş gereksinimini belirleyin: neyi hesaplayacak veya hangi dönüşü sağlayacak?
- Fonksiyon adını ve parametrelerini belirleyin, kısa bir docstring yazın.
- Fonksiyonu yazın ve tip ipuçları ekleyin (isteğe bağlı).
- Basit örneklerle çalıştırıp beklenen sonucu doğrulayın (print veya assert kullanın).
- Edge durumları için testler ekleyin (sıfıra bölme, boş listeler vb.).
Örnek: ortalama hesaplama ve basit test
def ortalama(sayilar):
"""Bir sayılar listesi alır ve ortalamasını döner."""
if not sayilar:
return None
return sum(sayilar) / len(sayilar)
assert ortalama([1, 2, 3]) == 2.0
assert ortalama([]) is None
Yüksek düzey örnekler
Fonksiyonlar başka fonksiyonları argüman olarak alabilir veya fonksiyon döndürebilir (higher-order functions):
def apply_twice(f, x):
return f(f(x))
print(apply_twice(lambda v: v + 3, 5)) # 11
Kaynaklar ve ileri okuma
- Python Tutorial — More Control Flow Tools (resmi belge, fonksiyon tanımları ve kontrol akışı açıklamaları).
- Python 3.8'deki Yenilikler (konumsal-only parametreler için '/').
Kısa özet
Fonksiyonlar Python'da kodu organize etmenin temel yoludur. Parametre türlerini (konumsal, anahtar, *args, **kwargs), varsayılan değerleri ve dönüş davranışlarını kavrayarak daha okunabilir ve bakım yapılabilir kod yazabilirsiniz. Resmi belgeler en güncel davranış farklarını detaylandırır; sürüm farklarına dikkat edin.