2.14. Fonksiyon tanımlama

Bir fonksiyon, bir kod bloğunu bir ad altında paketleyerek pek çok yerden çağrılabilmesini sağlar. Bir hesaplama, eylem ya da belirli bir iş parçası birden fazla yerde göründüğünde, bir fonksiyon onu tek bir adlandırılmış şeye dönüştürür.

Anahtar kelime def‘tir:

def greet(name):
    print("hello,", name)

greet("Alice")
greet("Bob")

Çıktı:

hello, Alice
hello, Bob

def ile başlayan satır tanımdır – fonksiyonu oluşturur ancak gövdesini çalıştırmaz. greet("Alice") çağrısı, girintili bloğu çalıştıran şeydir.

2.14.1. Parametreler ve argümanlar

def satırındaki parantezlerin içindeki adlar parametrelerdir – çağıran tarafın sağlayacağı değerler için yer tutuculardır. Aktarılan gerçek değerler ise argümanlardır. Bir fonksiyon sıfır ya da daha fazla parametre alabilir:

def square(x):
    return x * x

def add(a, b):
    return a + b

def is_even(n):
    return n % 2 == 0

Yanlış sayıda argümanla yapılan bir çağrı hemen TypeError hatası verir.

2.14.2. return

Bir return ifadesi fonksiyonu derhal sonlandırır ve çağırana bir değer geri verir:

def absolute(x):
    if x < 0:
        return -x
    return x

Hiçbir zaman bir return ifadesine ulaşmayan (ya da değeri olmayan çıplak bir return içeren) bir fonksiyon None döndürür:

>>> def shout(text):
...     print(text.upper())
...
>>> result = shout("hi")
HI
>>> print(result)
None

Bir fonksiyonun birden fazla return ifadesi olabilir; ilk ulaşılan kazanır ve gövdenin geri kalanı atlanır.

2.14.2.1. Birden fazla değer döndürme

Python çağrı başına bir nesne döndürür, ancak o nesne bir tuple olabilir – ve çağıran taraf onu hemen yerinde açabilir:

def minmax(values):
    return (min(values), max(values))

lo, hi = minmax([3, 1, 4, 1, 5, 9])

Dönüş değerinin etrafındaki parantezler isteğe bağlıdır; return a, b ve return (a, b) aynıdır.

2.14.3. Docstring’ler

Bir fonksiyon gövdesinin ilk ifadesi olarak yerleştirilen bir dize değişmezi bir docstring‘tir. Fonksiyon nesnesinde saklanır ve help() fonksiyonunun gösterdiği şeydir:

def scale(value, factor):
    """Multiply ``value`` by ``factor`` and return the result."""
    return value * factor

IDE, imleç fonksiyon adının üzerine geldiğinde docstring’leri araç ipuçlarında gösterir, dolayısıyla tek satırlık bir özet bile kendini amorti eder. Üç tırnaklı dizeler, daha fazla ayrıntı yararlı olduğunda docstring’in birden fazla satıra yayılmasına olanak tanır.

2.14.4. Adlandırma kuralları

Fonksiyon adları snake_case kullanır – alt çizgilerle ayrılmış küçük harfli sözcükler. Ad, fonksiyonun ne yaptığını tanımlamalıdır:

  • İyi: read_temperature, parse_header, is_valid.

  • Kaçının: do_stuff, handle1, temp_func.

Baştaki bir alt çizgi (_helper), bir fonksiyonu modülüne özel (dahili) olarak işaretler. Bu kurala yaygın olarak uyulur ancak Python tarafından zorunlu kılınmaz.