Python Fonksiyonları: Nasıl Tanımlanır ve Kullanılır?

Python fonksiyonları, belirli bir işlevi yerine getirmek üzere gruplanmış, yeniden kullanılabilir kod bloklarıdır. Karmaşık yazılım projelerini düzenli, okunabilir ve sürdürülebilir kılmanın temel anahtarını sunan bu yapılar, yazılım geliştirmede aynı kodu tekrar tekrar yazmaktan kaçınma (DRY – Don’t Repeat Yourself) prensibini uygulamanıza imkân tanır. Böylece programlama sürecinde hem zamandan tasarruf sağlar hem de olası hata yapma riskini en aza indirirsiniz.
def anahtar kelimesi kullanılır, fonksiyona bir isim verilir, parantez içinde parametreler belirlenir ve kod bloğu iki nokta üst üste (:) işaretinden sonra girintili olarak yazılır. Fonksiyonu çalıştırmak için ise fonksiyon adının yanına parantez eklenerek çağrı yapılır.- Python’da fonksiyonların temel çalışma mantığını ve modüler kod yazmanın önemini anlayacaksınız.
defanahtar kelimesi ile kendi özel fonksiyonlarınızı doğru sözdizimi kullanarak tanımlayabileceksiniz.- Parametre, argüman, varsayılan değerler ve
*args/**kwargsyapılarını kullanmayı öğreneceksiniz. returndeyimi ileprint()arasındaki farkı kavrayıp fonksiyonlardan değer döndürebileceksiniz.- Değişken kapsamı (Scope) kurallarını ve
lambda(anonim) fonksiyonlarını uygulayabileceksiniz.
- Fonksiyonlar kod tekrarını önler ve yazılımın okunabilirliğini artırır.
- Python’da fonksiyon tanımlarken
defifadesi kullanılır. - Fonksiyonlar parametre alabilir veya parametresiz tanımlanabilir.
returnifadesi fonksiyonun ürettiği sonucu dış dünyaya aktarır ve fonksiyonu sonlandırır.- Python’da tanımlanan değişkenlerin geçerlilik alanı (kapsam/scope) yerel (local) veya küresel (global) olabilir.
Python’da Fonksiyon Nedir ve Neden Kullanılır?
Programlama öğrenirken karşılaşılan en temel kavramlardan biri olan fonksiyonlar, devasa veri kümelerini veya karmaşık mantıksal süreçleri yönetilebilir parçalara bölmeye yarar. Tıpkı matematiksel fonksiyonlarda olduğu gibi, Python fonksiyonları da çoğunlukla bir girdi (input) alır, bu girdiyi işler ve bir çıktı (output) üretir. Günlük yaşamda bir mutfak robotuna benzetebileceğimiz bu yapılar, malzemeyi içine koyduğunuzda size işlenmiş ve hazır bir ürün sunar.
Yazılım dünyasında modülerlik, kod kalitesini belirleyen en kritik unsurların başında gelir. Fonksiyonlar sayesinde kodunuzu mantıksal parçalara ayırabilir, bir projenin farklı noktalarında aynı işlemi tek bir satırla tekrar çağırabilirsiniz. Bu yaklaşım, hem kodun test edilebilirliğini artırır hem de hata tespit süreçlerini son derece kolaylaştırır.
Python’da Fonksiyon Nasıl Tanımlanır?
Python dilinde fonksiyon tanımlamak oldukça basit ve sezgisel bir süreçtir. Yapı oluşturulurken ilk olarak def (definition – tanımlama) anahtar kelimesi kullanılır. Ardından fonksiyona uygun bir isim verilir ve parantez () açılıp kapatılır. Parantezlerin sonuna eklenen iki nokta : simgesi ise fonksiyon gövdesinin başlayacağını haber verir.
Fonksiyon bünyesinde yer alacak kod blokları mutlaka girintili (indentation – genelde 4 karakter boşluk) yazılmalıdır. Python sözdiziminde girıntı yapısı, hangi kod satırının fonksiyona ait olduğunu belirleyen temel kuraldır.
En basit haliyle bir selamlama fonksiyonu tanımlayalım:
def karsilama():
print("Ders Merkezi'ne Hoş Geldiniz!")
# Fonksiyonu Çağırma
karsilama()Yukarıdaki örnekte karsilama() fonksiyonu tanımlanmış ve ardından çağrılarak ekrana mesaj yazdırılmıştır. Unutulmamalıdır ki bir fonksiyon tanımlandığı anda doğrudan çalışmaz; yalnızca belleğe kaydedilir. Kodun icra edilmesi için fonksiyon adı parantezleriyle birlikte çağrılmalıdır.
Parametre ve Argüman Kullanımı
Fonksiyonların dinamik bir yapı kazanmasını sağlayan en önemli mekanizma parametrelerdir. Fonksiyon tanımlanırken parantez içine yazılan değişkenlere parametre, fonksiyon çağrılırken bu parametrelere aktarılan gerçek değerlere ise argüman adı verilir.
Parametreler sayesinde fonksiyonlar sabit işlemler yürütmek yerine, dışarıdan aktarılan veriler doğrultusunda esnek sonuçlar üretebilir. Python Programlama: Yeni Başlayanlar İçin Temel Kılavuz içeriğinde de değindiğimiz üzere bu yaklaşım, kodun tekrar kullanılabilirliğini üst seviyeye çıkarır.
def kisi_karsila(isim, soyisim):
print(f"Merhaba {isim} {soyisim}, eğitimimize hoş geldin!")
# Argüman geçerek çağırma
kisi_karsila("Ahmet", "Yılmaz")TypeError hatasına yol açar.Varsayılan (Default) Parametre Değerleri
Bazı senaryolarda bir parametrenin kullanıcı tarafından dışarıdan verilmesi zorunlu olmayabilir. Böyle durumlarda fonksiyona varsayılan bir değer atanır. Kullanıcı bir argüman belirtmediğinde bu varsayılan değer devreye girer; bir değer gönderdiğinde ise yeni değer öncelik kazanır.
def ulasim_bilgisi(sehir, ulke="Türkiye"):
print(f"{sehir} şehri {ulke} sınırları içerisindedir.")
ulasim_bilgisi("Ankara") # Output: Ankara şehri Türkiye sınırları içerisindedir.
ulasim_bilgisi("Berlin", "Almanya") # Output: Berlin şehri Almanya sınırları içerisindedir.Return Deyimi ile Değer Döndürme
Yazılıma yeni başlayanların sıklıkla karıştırdığı konulardan biri, print() fonksiyonu ile return deyimi arasındaki farktır. print() komutu ekrana yalnızca görsel bir çıktı basar ancak üretilen veriyi bellekte tutmaz. Oysa return deyimi, fonksiyonun ürettiği sonucu çağrıldığı noktaya aktarır. Böylelikle elde edilen değer farklı değişkenlere atanabilir ya da mevcuttaki diğer hesaplamalarda doğrudan kullanılabilir.
Bunun yanı sıra return ifadesi tetiklendiği anda fonksiyonun çalışması anında sonlanır ve kontrol ana programa devredilir.
def kare_al(sayi):
return sayi ** 2
sonuc = kare_al(5)
print(sonuc + 10) # Ekrana 35 yazar.Yukarıdaki örnekte kare_al(5) çağrısı bize 25 değerini ürettip döndürmüştür. Biz de bu değeri sonuc değişkeninde saklayarak üzerine 10 ekleyebildik. Şayet fonksiyon içinde return yerine print() tercih etseydik, geriye bir değer dönmeyeceği (sonuç None olacağı) için matematiksel işleme devam edemezdik.
Birden Fazla Değer Döndürme
Python’ın sunduğu esnekliklerden biri de tek bir return satırı üzerinden birden fazla değeri dışarıya aktarabilmesidir. Virgülle ayrılan bu değerler, Python tarafından otomatik olarak bir demet (tuple) yapısı altında paketlenir.
def islem(a, b):
toplam = a + b
carpim = a * b
return toplam, carpim
t, c = islem(4, 5)
print(f"Toplam: {t}, Çarpım: {c}") # Toplam: 9, Çarpım: 20Değişken Sayıda Argüman Alma: *args ve **kwargs
Geliştirdiğimiz uygulamalarda bir fonksiyona kaç adet argüman aktarılacağını önceden öngöremediğimiz senaryolarla karşılaşabiliriz. Örneğin, kullanıcının girdiği belirsiz miktardaki sayıyı toplamak veya dinamik bir veri listesini işlemek istediğimizde esnek parametre yapıları imdadımıza yetişir.
*args Yapısı (Positional Arguments)
Fonksiyon tanımında parametre adının önüne tek yıldız (*) yerleştirildiğinde, fonksiyona iletilen tüm konumlu (positional) argümanlar bir demet (tuple) bünyesinde toplar. Nitekim Kullanıcı Girişi ve Çıkışı: Python ile Temel IO İşlemleri konusundaki veri alma süreçleri de bu tür esnek yapılardan sıklıkla beslenir.
def sayilari_topla(*args):
toplam = 0
for sayi in args:
toplam += sayi
return toplam
print(sayilari_topla(1, 2, 3)) # 6
print(sayilari_topla(10, 20, 30, 40)) # 100**kwargs Yapısı (Keyword Arguments)
Fonksiyon tanımında parametre isminin önüne çift yıldız (**) konulduğunda, fonksiyona gönderilen tüm anahtar-değer (key-value) çiftleri bir sözlük (dictionary) nesnesinde saklanır.
def ogrenci_bilgisi(**kwargs):
for anahtar, deger in kwargs.items():
print(f"{anahtar}: {deger}")
ogrenci_bilgisi(ad="Zeynep", numara="102", bolum="Bilgisayar")Yerel ve Küresel Değişken Kapsamı (Scope)
Python’da değişkenlerin erişilebilirliği, tanımlandıkları yere göre değişir. Bu kavrama değişken kapsamı (scope) adı verilir. Fonksiyonların içinde tanımlanan değişkenler yerel (local), fonksiyon dışında tanımlanan değişkenler ise küresel (global) olarak adlandırılır.
x = 50 # Küresel Değişken
def test():
x = 10 # Yerel Değişken
print(f"Fonksiyon içi x: {x}")
test() # Fonksiyon içi x: 10
print(f"Fonksiyon dışı x: {x}") # Fonksiyon dışı x: 50Şayet bir fonksiyon bünyesinden küresel bir değişkeni güncellemeniz gerekirse global anahtar kelimesinden faydalanabilirsiniz. Ne var ki bu yaklaşım kodun izlenebilirliğini zorlaştırabileceği için çok gerekli olmadıkça önerilmez. Veri akışının kontrol altında tutulması ilkesine Dosya İşlemleri Rehberi: Python ile Okuma ve Yazma Nasıl Yapılır? çalışmasında da detaylıca değinilmiştir.
Lambda ve Özyineli (Recursive) Fonksiyonlar
Python, standart fonksiyon tanımlama yöntemlerinin haricinde daha pratik ve ileri düzey fonksiyonel yaklaşımlar da barındırır. Tek satırlık isimsiz yapıları ifade eden lambda ifadeleri ile kendi kendini çağıran özyineli (recursive) fonksiyonlar bu tekniklerin başında yer alır.
Lambda Fonksiyonları
İsme ihtiyaç duymayan, tek bir ifade (expression) içeren küçük fonksiyonlar tanımlamak için lambda anahtar kelimesi kullanılır.
# Klasik Fonksiyon
def karesi(x):
return x * x
# Lambda Karşılığı
kare_lambda = lambda x: x * x
print(kare_lambda(6)) # 36Özyineli (Recursive) Fonksiyonlar
Bir fonksiyonun kendi kendisini çağırması işlemine özyineleme (recursion) denir. Matematiksel faktöriyel hesaplamalarında veya ağaç veri yapılarında sıklıkla kullanılır. Özyineli fonksiyonlarda sonsuz döngüye girmemek için mutlaka bir durma koşulu (base case) bulunmalıdır.
def faktoriyel(n):
if n == 1 or n == 0:
return 1
return n * faktoriyel(n - 1)
print(faktoriyel(5)) # 120Fonksiyon Tiplerinin Karşılaştırma Tablosu
Python’da sıklıkla kullanılan fonksiyon yapılarının temel özelliklerini ve kullanım amaçlarını aşağıdaki tablodan inceleyebilirsiniz:
| Fonksiyon Tipi | Sözdizimi İpucu | Kullanım Amacı |
|---|---|---|
| Standart Fonksiyon | def fonksiyon_adi(): | Genel amaçlı, birden fazla satırdan oluşan mantıksal işlemler. |
| Parametreli Fonksiyon | def func(a, b=10): | Dışarıdan veri alarak dinamik hesaplama ve veri işleme. |
| Lambda Fonksiyonu | lambda x: x + 1 | Kısa, tek satırlık, hızlı ve geçici fonksiyon ihtiyaçları. |
| Özyineli (Recursive) | def func(): func() | Kendi kendini çağırarak karmaşık problemleri alt problemlere bölme. |
- Bir sayının çift mi yoksa tek mi olduğunu kontrol edip
TrueveyaFalsedöndüren bir Python fonksiyonunu nasıl yazarsınız? returnifadesi kullanılmayan bir Python fonksiyonu çağrıldığında hangi varsayılan değeri geri döndürür?- Bir fonksiyona sınırsız sayıda anahtar-değer (dictionary mantığıyla) argümanı geçmek için hangi yapı kullanılır?
- Yerel (local) bir değişken ile küresel (global) bir değişken arasındaki temel fark nedir?
- Fonksiyonlar
defkelimesiyle tanımlanır ve isimlerinin yanına parantez konularak çağrılır. - Parametreler fonksiyonlara veri aktarır;
returndeyimi ise üretilen sonucu dışarıya teslim eder. - Varsayılan parametreler sayesinde fonksiyon argümanları opsiyonel hale getirilebilir.
*argslistelenebilir esnek argümanlar,**kwargsise isimli esnek argümanlar sağlar.- Fonksiyon içinde tanımlanan değişkenler yerel kapsamdadır ve fonksiyon dışında doğrudan erişilemez.
Öğrendiklerinizi Pekiştirin
Python fonksiyonları, yazılım yolculuğunuzda karşılaşacağınız en güçlü ve vazgeçilmez yapı taşları arasındadır. Prosedürel kodlamadan nesne yönelimli programlamaya (OOP) geçerken fonksiyon mantığını kavramış olmak, kodlama becerilerinizi üst seviyeye taşıyacaktır.
Öğrendiğiniz teorik esasları kalıcı kılmak adına hemen kod editörünüzü açıp farklı parametreler ve return ifadeleri içeren denemeler yapabilirsiniz. Uygulama yaptıkça Python dilinin sunduğu esneklik ve konforu çok daha net fark edeceksiniz.
Sıkça Sorulan Sorular
- BTK Akademi — Sıfırdan Python Programlama Eğitimi Müfredatı ve Fonksiyon Yapıları
- TÜBİTAK Açık Ders Kaynakları — Temel Bilgisayar Bilimleri ve Algoritma Geliştirme Ders Notları

