Fonksiyon, İsimlendirilmiş Bir Adımlar Bloğudur
Aynı birkaç satırı birden fazla yazdığını fark ettiğin her an — ya da küçük bir mantık parçasına isim vermek istediğinde — bir fonksiyon yazmaya hazırsın. Fonksiyonlar, bir Python programında karmaşıklığı yönetmek için ilk gerçek araçtır.
Temel biçim:
Şöyle açıklayalım:
def, bir fonksiyon tanımını başlatan anahtar kelimedir.greet, fonksiyonun adıdır.(name), parametre listesidir — fonksiyonun aldığı girdiler.- İki nokta üst üste, başlığı bitirir; altındaki girintili blok gövdedir.
greet("Ada")bir çağrıdır. Python,name'i"Ada"'ya bağlı olarak gövdeyi çalıştırır.
Fonksiyonlar çağrılana kadar hareketsiz kalır. Birini tanımlamak onu çalıştırmaz. Onu greet("Ada") ile çağırmak çalıştırır.
Parametreler ve Argümanlar
Parametre kelimesi, fonksiyon tanımının içindeki isimdir. Argüman kelimesi ise çağırdığında iletilen değerdir. Gündelik konuşmada büyük bir mesele değil, ama hata mesajlarını okurken fark yardımcı olur.
Burada base ve exponent parametrelerdir. 2 ve 10 argümandır. Python onları sırayla bağlar: ilk argümanı ilk parametreye vs.
return: Bir Değeri Geri Göndermek
print ekrana yazar. return ise bir değeri çağırana geri verir ki onu kullanabilsin:
return olmadan bir fonksiyon varsayılan olarak None döner:
return ayrıca fonksiyonu hemen sonlandırır. Ana mantığa geçmeden önce kenar durumlardan çıkmak için erken return'leri sık görürsün:
Erken return'ler, ana gövdenin if/else içinde derinlemesine iç içe olmasını engeller.
Varsayılan Argümanlar
Bir parametrenin, çağıran değer vermediğinde kullanılan bir varsayılan değeri olabilir:
Varsayılanlı tüm parametreler, varsayılansız parametrelerden sonra gelmelidir. def f(a, b=1, c): bir söz dizimi hatasıdır.
Değiştirilebilir varsayılan tuzağı
Bu, Python'un en ünlü tuzağıdır. İzle:
Her çağrının boş bir listeyle başlamasını beklersin. Onun yerine varsayılan liste çağrılar arasında paylaşılır ve elemanlar birikir. Python, varsayılanı fonksiyon tanımlandığında bir kez değerlendirir ve bu tek listeyi sonsuza kadar yeniden kullanır.
Güvenli kalıp, varsayılan olarak None kullanmak ve listeyi fonksiyon içinde oluşturmaktır:
Artık items geçmeyen her çağrı taze bir liste alır. Bu kural listeler, dict'ler, set'ler — değiştirilebilir her şey için geçerlidir.
Anahtar Kelime Argümanları
Argümanları konum yerine isimle geçirebilirsin. Bu, ortadaki parametreleri atlamana ve uzun çağrıları daha okunaklı yapmana izin verir:
Konumsal ve anahtar kelime argümanları karışabilir, ancak konumsallar önce gelmelidir:
Bir fonksiyonun üç-dört parametreden fazlası olduğunda, anahtar kelime argümanlarını tercih etmek çağrıları çok daha okunaklı yapar.
Sadece-Konumsal ve Sadece-Anahtar-Kelime Parametreler
Python, bazı parametreleri yalnızca konumla çağrılabilir olarak (/ ile) ya da yalnızca anahtar kelimeyle (* ile) işaretlemene izin verir:
Birinci günde bunlara ihtiyacın yok. API'ler tasarlarken ve çağrıcıların fonksiyonunu nasıl kullanacağını kısıtlamak istediğinde kullanışlı olurlar.
Docstring'ler ve İsimlendirme
Bir fonksiyonun içindeki ilk satır bir docstring olabilir — Python'un dokümantasyon olarak ele aldığı üç tırnaklı bir string:
help(), IDE ipuçları ve dokümantasyon üreteçleri gibi araçlar docstring'i otomatik olarak okur. Tek satırlık bir açıklama, hiçbir şey olmamasından çok daha iyidir.
Ve lütfen, isimlendirme hakkında düşün:
- Fonksiyon adları fiil olmalı:
fetch_profile,compute_total,is_valid. lower_snake_casekullan.- Boolean döndüren fonksiyonlar genellikle
is_,has_veyacan_ile başlar.
İyi bir isim, çağrı noktasını yorum gerektirmeden kendi kendini açıklayıcı yapar.
Saf Fonksiyonlar Üzerinde Akıl Yürütmek Daha Kolaydır
Saf bir fonksiyon aynı girdi için aynı çıktıyı döndürür ve yan etkileri yoktur — global durumu değiştirmez, stdout'a yazmaz (debug dışında) ya da dosyalara yazmaz.
İkisinin de yeri var, ama yeniden kullanmak ve test etmek istediğin kodda, elinden geldiğince saf fonksiyonlara yönel.
Küçük Çalışan Bir Örnek
Varsayılanları, anahtar kelime argümanlarını ve return'ü birleştiren hızlı bir fonksiyon:
Sırada: Esnek Argüman Listeleri
Bazen bir fonksiyonun kaç argümanla çağrılacağını bilmezsin — ya da gelen argümanları olduğu gibi başka bir fonksiyona iletmek istersin. *args ve **kwargs bunu halleder. Sırada o var.
Sıkça Sorulan Sorular
Python'da bir fonksiyonu nasıl tanımlarım?
def anahtar kelimesini kullan; ardından fonksiyon adı, parametreler için parantezler ve iki nokta üst üste gelir. Altındaki girintili blok fonksiyonun gövdesidir. Örnek: def greet(name): print(f'Hi, {name}').
Python'da return ne yapar?
return, fonksiyonu çağırana bir değer geri gönderir. Açık bir return içermeyen bir fonksiyon otomatik olarak None döndürür. return çalıştığı anda fonksiyon hemen çıkar — aynı bloktaki sonraki kodlar atlanır.
Python'da varsayılan argümanlar nedir?
Varsayılan argümanlar, çağıran değer vermezse kullanılacak önceden ayarlanmış bir değere sahip olmasını sağlar. def greet(name='friend'):, argümansız greet() çağrısının 'friend' kullanacağı anlamına gelir. [] gibi değiştirilebilir varsayılanları asla kullanma — daha güvenli kalıp için aşağıya bak.