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.