Python fonksiyon yazımı: argüman, dönüş ve lambda örnekleri
Fonksiyonlar, kodu modüler ve yeniden kullanılabilir kılmanın temel yollarındandır. Bu yazıda, sık kullanılan python kod snippetleri ile fonksiyon tanımı, argüman çeşitleri, dönüş değerleri, docstring ve lambda ifadeleri hakkında pratik örnekler bulacaksınız. Temel dil davranışları için Python resmi belgelerine bakabilirsiniz: function definition — Python referansı.
1. Temel fonksiyon tanımı ve return
Bir fonksiyon def anahtar kelimesiyle tanımlanır; parametre listesi parantez içinde yer alır. Fonksiyonun dönüş değeri return ile belirtilir. Eğer return kullanılmazsa fonksiyon None döner.
def topla(a, b):
"""İki sayıyı toplar ve sonucu döner."""
return a + b
Yukarıdaki basit örnekte topla(2, 3) çağrısı 5 döner. Fonksiyon tanımları ve davranışları için resmi referans: https://docs.python.org/tr/3/reference/compound_stmts.html.
2. Positional ve keyword argümanlar; varsayılan değerler
Fonksiyonlar hem positional (sıralı) hem de keyword (anahtar kelime ile) argümanlar alabilir. Ayrıca parametrelere varsayılan değer vererek isteğe bağlı hale getirebilirsiniz.
def selamla(isim, mesaj="Merhaba"):
return f"{mesaj}, {isim}!"
Çağırma örnekleri:
selamla("Ayşe")→ "Merhaba, Ayşe!"selamla("Ali", mesaj="Selam")→ "Selam, Ali!"
Dikkat: Varsayılan değerler fonksiyon tanımlandığı anda değerlendirilir; mutable (ör. liste, sözlük) bir varsayılan kullanmak beklenmedik paylaşım davranışına yol açabilir. Bu davranışın sebepleri ve detayları için Python referansına bakabilirsiniz: Python dil referansı.
3. *args ve **kwargs: değişken sayıda argüman
*args, pozisyonel argümanları tuple olarak alır; **kwargs ise anahtar-değer çiftlerini sözlük olarak alır. Bu yapılar fonksiyonları esnek hale getirir.
def demo(*args, **kwargs):
print("Positional:", args)
print("Keyword:", kwargs)
Çağırma örnekleri:
demo(1, 2, a=3, b=4)liste = [1,2,3]; kwargs = {'x':10}; demo(*liste, **kwargs)
4. Keyword-only parametreler
Fonksiyonda bir yıldız (*) yerleştirirseniz, ondan sonra gelen parametreler yalnızca anahtar kelime ile atanabilir (keyword-only). Bu, API tasarımında netlik sağlar.
def baglan(host, port, *, timeout=10):
"""timeout yalnızca keyword ile verilebilir"""
...
5. Dönüş değerleri: tek/çoklu dönüşler ve None
Python fonksiyonları tek bir ifade döndürür, ancak bu ifade tuple, liste veya başka bir yapı olabilir; böylece çoklu değer döndürüyormuşsunuz gibi davranabilirsiniz.
def bolme_ve_kalan(x, y):
q = x // y
r = x % y
return q, r # tuple döner
Çağrı örneği: q, r = bolme_ve_kalan(10, 3)
Eğer fonksiyonda return bulunmazsa veya return ifadesi herhangi bir değer içermiyorsa fonksiyon None döndürür. Bu davranış dilin temel kurallarından biridir (bkz. resmi doküman).
6. Docstring ve type hint örnekleri
Fonksiyonun ne yaptığını anlatan kısa açıklamalar için docstring kullanın. Type hint'ler (pekiştirmeler) okunabilirliği artırır ve statik araçlarla birlikte fayda sağlar.
def carp(a: int, b: int) -> int:
'''Verilen iki tam sayıyı çarpar ve sonucu döner.''' return a * b
Docstring'ler IDE'lerde ve otomatik dokümantasyon araçlarında gözükür. Official docs fonksiyon tanımları ve docstring yaklaşımlarına değinir: Python fonksiyon tanımları.
7. Lambda ifadeleri: kısa anonim fonksiyonlar
lambda ifadeleri tek satırlık anonim fonksiyonlar üretir. Basit dönüşümler veya kısa callback'ler için uygundur; ancak daha karmaşık mantık için def tercih edilir.
square = lambda x: x * x
nums = [1, 2, 3]
print(list(map(lambda x: x * 2, nums))) # [2,4,6]
# sorted örneği: sıralama anahtarı olarak lambda kullanmak sık görülür
pairs = [(1, 'b'), (2, 'a')]
print(sorted(pairs, key=lambda p: p[1]))
Lambda ile def arasındaki seçim okunabilirlik ve karmaşıklığa bağlıdır. Tek satırlık, basit ifadeler için lambda yeterlidir; daha okunaklı ve test edilebilir olması için çoğu zaman adlandırılmış fonksiyonlar tercih edilir (bkz. resmi referans).
8. Hızlı test: assert ile temel doğrulama
Geliştirme aşamasında küçük doğrulamalar için assert kullanılabilir. Birim testleri için ise unittest veya pytest tercih edilir.
def topla(a, b):
return a + b
assert topla(2, 3) == 5
assert topla(-1, 1) == 0
Bu doğrulamalar hızlı geri bildirim sağlar; ancak kapsamlı testler ve otomasyon için test çerçeveleri kullanılmalıdır.
9. En iyi uygulamalar (pratik kontrol listesi)
Anlamlı isimler: Fonksiyon ve parametre isimleri işlevi açıkça ifade etsin.
Tek sorumluluk: Fonksiyonlar bir işi iyi yapacak kadar küçük olsun.
Docstring ekleyin: Ne yaptığı, parametreleri ve dönüş değeri kısa açıklanmalı.
Mutable varsayılanlardan kaçının: Gerekirse
Nonekullanıp içeride oluşturun.Type hint kullanımı: IDE ve statik analiz araçlarına yardımcı olur.
Basit testler yazın: Asserttler veya birim testleriyle doğrulayın.
10. Hızlı referans tablosu
| Konsept | Kısa örnek |
|---|---|
| Def | def f(x): return x |
| *args / **kwargs | def f(*a, **k): ... |
| Lambda | lambda x: x*2 |
| Docstring | '''Açıklama''' |
Sonuç olarak, fonksiyonlar kodunuzu düzenli ve tekrar kullanılabilir hale getirir. Buradaki örnekler Python'un temel fonksiyon davranışlarını göstermeye yönelik olup resmi dokümanlar fonksiyon tanımları ve ilgili detaylar için birincil kaynaktır: function definitions — Python referansı ve gömülü fonksiyonlar için Python gömülü fonksiyonlar. Bu örnekleri kendi projelerinizde deneyin, küçük testlerle doğrulayın ve okunabilirliği önceliklendirin.