Python *Args ve **Kwargs Kullanımı
Yazılımda yazdığımız fonksiyonların yeniden kullanılabilir olmasını isteriz. Ama eğer yazacağımız fonksiyona gelen parametre sayısı belli değil ise ne yapmalıyız hiç duşundunuz mu ? Gelin Beraber inceleyelim.
İlk olarak * yıldız ve ** iki yıldız işaretinin ne ise yaradığını öğrenelim.
my_list = [1, 2, 3, 4] print(my_list) # my_list listesinin acilmis hali print(*my_list) def print_out(msg, **kwargs): print(msg, kwargs) print_out("Hello", world="World", universe="Universe")
Yukarıdaki kod parçacığıma bakacak olursak * (yıldız) işaretinin listeyi açtığını (tuple’a çeviriyor) ve tek tek yazdırdığın görüyoruz. Fonksiyona gönderilen isimli değerlerin ise dict seklinde yazıldığını görmekteyiz.
Python da fonksiyon içerisinden başka bir fonksiyonu çağırdığımız durumlarda bazen fonksiyona gelen tüm değerleri diğer fonksiyona geçmek isteyebiliriz, bu gibi durumlarda *args ve **kwargs kullanarak tüm parametreleri yazmaktan kaçınmış oluruz.
def print_out2(*args, **kwargs): print(args, kwargs) def print_out(*args, **kwargs): # parametreleri print_out2 fonksiyonuna gonderiyoruz print_out2(*args, **kwargs) print_out("Hello", value1="World", value2="Universe")
*args fonksiyona pozisyonu ile gönderilen parametreleri içerirken, **kwargs ise sadece key=value seklinde yazılan parametreleri tutar.
Args ve kwargs değişken ismini değiştirebilirsiniz (*Ahmet **Mehmet), fakat kod okunabilirliği açısından bunu yapmanız önerilmez.
Extra:
locals()
Locals fonksiyonu yazıldığı yer kapsamındaki tüm değişkenleri erişebilmenizi sağlar.
def print_out(msg, *args, **kwargs): print(locals()) print_out("Hello", "asdasd", value1="World", value2="Universe")