Esnek parametre alan fonksiyon ile ilgili bir hata

Merhabalar,
Esnek parametre alan fonksiyonlarla ilgili bir sorum olacak.

def toplama (*a):
    toplam = 0
    for i in a:
        toplam = toplam +i
    return toplam

Bu şekilde esnek parametre alan bir fonksiyon yazdım ve bu fonksiyonu:

toplama(range(1,11))

gibi bir kullanım ile çağırmak istiyorum fakat şu şekilde bir hata alıyorum:

TypeError: unsupported operand type(s) for +: 'int' and 'range'

Bunu nasıl çözebilirim?

Merhaba, range(1, 11) fonksiyonunu aşağıdaki gibi kullanın. Çünkü toplama(range(1, 11)) şeklinde kullanmaya çalışırsanız, i = range(1, 11) olur ve toplam += range(1, 11) gibi bir işlem yapılmaya çalışılır, bu da TypeError hatası yükseltir.

toplama(*range(1, 11))
toplama(*range(1, 11), 12, 13, 14)

Teşekkür ederim sorunum çözüldü.
‘*’ işaretinin işlevi tam olarak nedir burada açıklayabilirseniz çok sevinirim. Liste içindeki elemanları tek tek almaya mı yarıyor?

Aynen öyle. * işareti yinelenebilir bir verinin elemanlarını bir tuple verisi gibi almanızı sağlar.

Anladım çok teşekkürler tekrardan :slightly_smiling_face:

Rica ederim. Aşağıda basit bir örnek var isterseniz ona da bakın:

>>> list(range(3, 6))
[3, 4, 5]
>>> args = [3, 6]
>>> list(range(*args))
[3, 4, 5]

Örnek: https://docs.python.org/3/tutorial/controlflow.html#unpacking-argument-lists adresinden alınmıştır.

Burada toplama’ya tek bir parametre verilmis (range fonksiyonunun 1 ve 11 argumanlariyla cagrildiginda dondurdugu deger).

def toplama(a): seklinde tek parametre alacak sekilde tasarlanmis bir fonksiyonla birlikte kullanilabilir bu. Esnek parametrelerin amaci su sekilde degisik cagrilari desteklemek:

toplama(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
toplama(1, 2, 3)
toplama()

Bu sekildeki cagrilari programatik olarak yapmak icin * operatoru de kullanilabilir:

toplama(*range(1, 11))