Python Belgelerde Fonksiyonlarla İlgili Bir Kod Üzerine


Merhaba Python’da belgelerde çalışırken bu kodun **sozluk yazan kısmını anlayamadım karşılık_bul diye çağırdığımız **sozluk
ifadesinin anlamı nedir , etkisi nedir ? Neden başında 2 yıldız var . 2 yıldızı parametreye yazarken sonsuz sayıda isimli değer girmemizi sağlıyor diye biliyorum peki buradaki görevi nedir ? Tane tane açıklayabilecek var mı ? Şimdiden vakit ayıranlar için teşekkür ederim.

2 Beğeni

def karşılık_bul(*args, **kwargs) ifadesindeki **kwargs bir sözlüktür. Bu sözlük aslında ön-tanımlı değeri olan parametrelerin tamamını temsil etmek için kullanılır.

def fonksiyon(**kwargs):
    print(kwargs)

Bu fonksiyonu şu şekilde çağırabilirsiniz:

fonksiyon(a=2, b=3)

Buradaki a ve b, **kwargs sözlüğünün anahtarlarıdır. a'ya eşitlediğimiz 2 ve b'ye eşitlediğimiz 3 ise bu anahtarların değerleridir.

Ve fonksiyonu yukarıdaki gibi çağırırsanız alacağınız çıktı şöyle olur:

{'a': 2, 'b': 3}

Bu fonksiyonu çağırırken a=2 ve b=3 yazmak yerine aşağıdakini de yazabiliriz:

sozluk = {"a": 2, "b": 3}
fonksiyon(**sozluk)

Yani fonksiyon(a=2, b=3) yazmak ile fonksiyon(**{"a": 2, "b": 3}) yazmak arasında hiç bir fark yoktur.

Başka bir örnek:

def fonksiyon(**kwargs):
    if "a" in kwargs:
        print(kwargs["a"])


fonksiyon(a=2, b=3)

Bu fonksiyonu çağırdığımız zaman alacağımız çıktı 2'dir. Çünkü fonksiyon içindeki koşula göre a **kwargs sözlüğünün bir anahtarı ise a'nın değeri ekrana yazdırılır.

Başka bir fonksiyon yazalım:

def fonksiyon(*args, **kwargs):
    for arg in args:
        if arg in kwargs:
            print(kwargs[arg])
            
              
fonksiyon("merhaba", "dünya", dünya="earth")

Bu fonksiyonu çalıştırdığımızda ekrana earth yazısı yazdırılır. Çünkü fonksiyon içindeki koşul bize diyor ki, *args demet verisinin elemanları arasından, **kwargs sözlüğünün anahtarı olan elemanların değerlerini ekrana yazdır.

Fonksiyonu çağırma biçimimize bakıyoruz:

fonksiyon("merhaba", "dünya", dünya="earth")

merhaba ve dünya, *args demet verisinin elemanları.
dünya ise **kwargs sözlüğünün anahtarı.
O halde *args demet verisindeki dünya, **kwargs sözlüğünün bir anahtarı. Bu yüzden de dünya anahtarının değeri olan earth ekrana yazdırılıyor.

5 Beğeni

Yani ** yaptığımızda sözlüklerde parametre olarak gönderiyor mesela print(**{"a":5})yaptığımızda print fonksiyonuna a parametresini gönderemezsin gibi bir şey söylüyor yanlismiyim

Aynen, print’in a isminde bir anahtar kelime argümanı olmadığı için hata alırız.

2 Beğeni