Kısa Python Notları

Bilmekte fayda olan notlar

Posted on February 23, 2023

Fonksiyonlarda Varsayılan Parametrelerin Kullanımına Dikkat!

Bir sözlük (dictionary) veri yapısına yeni bir anahtar-değer çifti ekleyen bir işlevi (fonksiyon) tanımlamak isteyebiliriz. Bu fonksiyon içerisinde "d" parametresi ile, eğer fonksiyon herhangi bir sözlük veri yapısı belirtilmeden çağrılırsa kullanılacak olan varsayılan sözlük değeri tutuluyor.

İşlevin gövdesi (body) ise, belirtilen anahtar-değer çiftini sözlük yapısına ekleyen ve son olarak sözlüğü ekrana yazdıran bir kod bloğudur.

def func (key, value, d={}):
    d[key]=value
    print(d)

Bu fonksiyonu "func('a',10)" şeklinde çağırdığımızda (sonucu bir değişkene atama yapmadığımıza dikkat edin) aşağıdaki sonucu görürüz. Burada fonksiyonu çağırırken bir varsayılan sözlük göndermiyoruz(Bu kısım önemli). Çıktı şu şekildedir:

{'a': 10}

Aynı fonksiyonu "func('b',10)" şeklinde çağırdığımızda aşağıdaki sonucu görürüz:

{'a': 10, 'b': 10}

Fonksiyon her çağrıldığında, eğer d parametresi belirtilmemişse, varsayılan olarak aynı sözlük kullanılır. Çünkü Python varsayılan parametreleri yalnızca fonksiyon ilk kez tanımlandığında yaratır ve her çağrıda yeniden oluşturmaz. Bu nedenle, fonksiyonun birinci çağrısı sonrasında eklenen anahtar-değer çifti, ikinci çağrıda da aynı sözlük yapısında yer alacaktır. Bu özellik, birkaç farklı çağrı arasında veri paylaşımını sağlayabilir. Ancak bu örnek , bu varsayılan parametrenin kullanımında dikkatli olunması gerektiğinin önemli bir örneğidir

Şayet fonksiyonun her defasında yeni bir sözlük yaratmasını istiyorsak kod aşağıdaki gibi olmalıdır. Burada fonksiyonun içinde varsayılan değeri None olarak belirleyebilir ve fonksiyonun başında if koşulu ile kontrol edebiliriz. Eğer d değişkeni None ise, fonksiyonun içinde yeni bir sözlük oluşturulur.

def func(key, value, d=None):
    if d is None:
        d = {}
    d[key] = value
    print(d)