Python 3.6 sum() 是否有 `start=0` 关键字参数?

Does Python 3.6 sum() have `start=0` keyword argument?

这看起来很基础,但由于它涉及 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

这是怎么回事?

原型is a convention that means that all arguments prior to it are positional only中的/;它们不能通过关键字传递。 Python 中定义的函数无法做到这一点(至少,如果不接受 *args 中的参数并手动解压内容,尽管链接的 PEP 建议这样做允许 Python 级别的语法功能),但由于 sum 是用 C 实现的内置函数,它可以做到这一点(它实际上是在内部进行手动解包,但可以宣传更有用的原型),并且更容易定义默认值。不接受关键字参数允许它比允许关键字参数的可能性更有效地运行。

要点是,参数并不是 真正 命名的 start,所以你不能按名称传递它;你必须按位置传递它,例如:

sum([0,1,2], 1)