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
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.
aib
Temmuz 20, 2019, 1:04ös
7
asyaydem:
toplama(range(1,11))
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))