Имеет ли Python 3.6 sum() аргумент ключевого слова `start=0`?
Это кажется довольно простым, но поскольку оно относится к языку Python как таковому, я чувствую себя потерянным здесь. Согласно документации Python 3.6:
>>>help(sum)
...
sum(iterable, start=0, /)
Return the sum of a 'start' value (default: 0) plus an iterable of numbers
...
Когда я звоню: sum([0,1,2], start=1)
, Я получаю:
TypeError: sum() takes no keyword arguments
Что тут происходит?
1 ответ
/
в прототипе есть соглашение, которое означает, что все аргументы до него являются только позиционными; они не могут быть переданы по ключевому слову. Функции, определенные в Python, не могут этого сделать (по крайней мере, не принимая аргументы в *args
и вручную распаковывать содержимое, хотя связанный PEP предлагает разрешить синтаксис и для функций уровня Python), но так как sum
Это встроенная функция, реализованная в C, которая может это делать (фактически она выполняет внутреннюю распаковку вручную, но может рекламировать более полезный прототип) и намного проще определить значение по умолчанию. Непринятие аргументов по ключевому слову позволяет ему работать несколько эффективнее, чем возможность использования аргументов по ключевым словам.
Дело в том, что аргумент на самом деле не назван start
так что вы не можете передать его по имени; Вы должны передать это позиционно, например:
sum([0,1,2], 1)