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

  1. İş gereksinimini belirleyin: neyi hesaplayacak veya hangi dönüşü sağlayacak?
  2. Fonksiyon adını ve parametrelerini belirleyin, kısa bir docstring yazın.
  3. Fonksiyonu yazın ve tip ipuçları ekleyin (isteğe bağlı).
  4. Basit örneklerle çalıştırıp beklenen sonucu doğrulayın (print veya assert kullanın).
  5. 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

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.