Python'da değişken sayıda parametre almak için *args
kullanılır. *args
, bir fonksiyona kaç tane argüman gönderileceğini bilmediğimiz durumlarda kullanılır ve bu argümanlar bir tuple (demet) olarak işlenir. *args
sayesinde fonksiyonlara istediğimiz kadar pozisyonel argüman gönderebiliriz.
Temel Yapı
def fonksiyon_adi(*args):
# args, bir tuple olarak çalışır
for arg in args:
print(arg)
-
*args
, bir tuple olarak tüm pozisyonel argümanları alır. - İstediğiniz kadar argüman gönderebilirsiniz.
Örnek: *args
Kullanımı
Aşağıdaki örnekte, bir fonksiyon yazalım ve ona kaç tane sayı verilirse verilsin bu sayıların toplamını hesaplayalım.
def sayilari_topla(*args):
return sum(args)
# Farklı sayıda argümanlarla fonksiyonu çağırabiliriz
print(sayilari_topla(1, 2, 3)) # Çıktı: 6
print(sayilari_topla(10, 20, 30, 40)) # Çıktı: 100
*args
ile Döngü Kullanımı
*args
parametresine gelen argümanları bir döngü ile işleyebiliriz. Örneğin, bu argümanları tek tek yazdıran bir fonksiyon yazalım:
def bilgileri_yaz(*args):
for arg in args:
print(arg)
# Fonksiyonu çağırarak argümanları döngüyle işleyebiliriz
bilgileri_yaz("Ahmet", 25, "Mühendis", "İstanbul")
Çıktı:
Ahmet 25 Mühendis İstanbul
Pozisyonel Argümanlar ile *args
Birlikte Kullanımı
Fonksiyonunuzda *args
ile birlikte diğer pozisyonel argümanları da kullanabilirsiniz. Ancak, normal pozisyonel argümanlar her zaman *args
'tan önce gelmelidir.
def selamla(mesaj, *isimler):
for isim in isimler:
print(f"{mesaj}, {isim}!")
# Bir mesaj ve birden fazla isim gönderebiliriz
selamla("Merhaba", "Ahmet", "Ayşe", "Mehmet")
Çıktı:
Merhaba, Ahmet! Merhaba, Ayşe! Merhaba, Mehmet!
*args
ve Varsayılan Parametreler
*args
ile varsayılan parametreleri de aynı fonksiyonda kullanabilirsiniz. Varsayılan parametreler, *args
'tan önce veya sonra gelebilir, ancak *args
'tan sonra olan varsayılan parametrelerin keyword arguments ile çağrılması gerekir.
def bilgi_gir(isim, *args, yas=18
):
print(f"İsim: {isim}, Yaş: {yas}")
print("Diğer bilgiler:", args)
# Yaş belirtilmezse varsayılan değer kullanılacak
bilgi_gir("Ahmet", "Mühendis", "İstanbul") # Varsayılan yaş: 18
# Yaş belirtilirse verilen değer kullanılacak
bilgi_gir("Ayşe", "Doktor", "Ankara", yas=30) # Yaş: 30
Çıktı:
İsim: Ahmet, Yaş: 18 Diğer bilgiler: ('Mühendis', 'İstanbul') İsim: Ayşe, Yaş: 30 Diğer bilgiler: ('Doktor', 'Ankara')
*args
ile Liste veya Tuple Göndermek
Eğer bir liste ya da tuple'ı *args
olarak bir fonksiyona göndermek isterseniz, bu veri yapısının başına *
ekleyerek elemanlarını ayırabilirsiniz.
def sayilari_topla(*args):
return sum(args)
liste = [1, 2, 3, 4]
tuple_dizi = (5, 6, 7)
# Liste veya tuple'daki elemanları fonksiyona gönderebiliriz
print(sayilari_topla(*liste)) # Çıktı: 10
print(sayilari_topla(*tuple_dizi)) # Çıktı: 18
Özet
-
*args
ile bir fonksiyona değişken sayıda pozisyonel argüman gönderebilirsiniz. -
*args
, gelen argümanları bir tuple olarak işler. - Pozisyonel argümanlar,
*args
'tan önce tanımlanmalı, aksi takdirde hata oluşur. - Varsayılan parametreler ve
*args
birlikte kullanılabilir, ancak doğru sıralama önemlidir.