2013-09-21 3 views
1

Итак, я просто пошел к разделу кортежей в соответствии с Подумай Python учебник и то, что я хочу спросить, почему это работает:Python кортежей и сумма() запрос

def sumall(*args): 
    return sum(args) 
print sumall(1, 2, 3, 4) 

и это

sum(1,2,3,4) 

нет?

ответ

2

Поскольку args является кортежем, который является один аргументом. Далее делает то же самое, как вашу функцию и работает:

sum((1,2,3,4)) 

Без дополнительной скобки, вы вызываете sum() с четырьмя отдельными аргументами, так что первый аргумент не является кортеж из 4-х целых чисел, но только один целое. Это не работает, потому что sum() ожидает, что первым аргументом будет последовательность. Необязательный второй аргумент может использоваться, чтобы дать другое начальное значение (по умолчанию 0), что означает, что sum() занимает не более 2 аргументов.

+0

Большое спасибо Мартин, я буквально чувствую мой мозг расширяющейся за последние несколько дней, это как я никогда не имел подумать, прежде чем я начал изучать Python. –

1

Существует небольшая разница между встроенным sum и вашим sumall. sum получает итерируемый (обычно list или tuple) аргумент (всегда один аргумент!) И sumall получает столько аргументов, сколько вы передали.

Почему? Потому что вы добавили знак звездочки в вашей подписи функции, встроенные в сумме должны быть определены как следующее:

def sum(args): # note: no asterisk here 
    result = 0 
    for val in args: 
    result += val 
    return result 
+0

Саша, спасибо, все в порядке приветствуется :). –

Смежные вопросы