Sınırsız Sayıda Parametre Verme

Merhabalar , Python belgelerde çalışırken şu cümle dikkatimi çekti : “print fonksiyonu teknik olarak 256 pratikte ise sınırsız sayıda parametre alabilir .” Pratikte nasıl sınırsız alabileceğini açıklayabilir misiniz ? Vakit ayıran arkadaşlara şimdiden çok teşekkür ederim.

Merhaba. Python 3.7 ve sonrasında böyle bir sınır yok. Yazar orada ne kastetmek istemiş emin değilim ama o kısmın düzeltilmesi lazım.

1 Beğeni

Teşekkür ederim cevabınız için.

*args ve/veya **kwargs’ı kastetmiş olabilir mi ki?

1 Beğeni
def kayıt_oluştur(**bilgiler):
    print("-"*30)
    for anahtar, değer in bilgiler.items():
        print("{:<10}: {}".format(anahtar, değer))
    print("-"*30)
kayıt_oluştur(ad="Fırat", soyad="Özgül", şehir="İstanbul", tel="05333213232")

örnek bu şekilde.

Fonksiyonu yazarken *args yazdığımızda fonksiyona gönderdiğimiz tüm positional argümanlar (yani keyword ikilisi şeklinde olmayanlar) args isimli tuple'da toplanıyor.

def f(*args):
    print("args meğerse şuymuş:", args)
    print("args'ın veri tipi de buymuş:", type(args))

f(7, 24, "25", object(), object, True, lambda: 3, f)

Ekrem Bey’in de belirttiği üzere Python 3.7 öncesi 256 veya daha fazla argüman alabilen bir fonksiyon yazılamıyormuş, eksikliğini hisseden var mıydı bilmiyorum… (neden 256 ve daha fazlası için).

Ama yine de o zamanlarda da *args ve **kwargs sayesinde “sınırsız” parametreli fonksiyon yazılabiliyor, tabii bir sınır var aslında, o da sys.maxsize. Bu sayı Python’daki bir veri tipinin ne kadar sayıda elemena sahip olabileceğinin üst limitiymiş. Benim sistemde bu 9223372036854775807; dolayısıyla bu sayı kadar parametre ile yukarıdaki fonksiyonu çağırmakta özgürüm zira hepsi args ismindeki (isim önemli değil burada tabii, * önemli olan ve parametreleri bir arada toplayan) tuple’da toplanıyor ve o da o sayı kadar eleman içerebiliyor.

Benzer işler **kwargs için de geçerli - orada positional’lar değil keyword argümanları bir araya geliyor, ve tuple’da değil dict üzerinde tutuluyor. Sizin verdiğiniz örnekte olduğu üzere.

Bu arada *'ın Python’daki (heralde) tüm işlevlerini şurada bulabilirsiniz:
https://treyhunner.com/2018/10/asterisks-in-python-what-they-are-and-how-to-use-them/