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.
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.
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.
