2

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

这里发生了什么?

4

1 回答 1

7

/原型中的是一个约定,这意味着它之前的所有参数都只是位置的;它们不能通过关键字传递。Python 中定义的函数不能做到这一点(至少,不仅仅是接受参数*args并手动解包内容,尽管链接的 PEP 建议也允许 Python 级函数的语法),但因为sum是内置实现的C 它可以做到这一点(它实际上是在内部进行手动解包,但可以宣传更有用的原型),并且更容易定义默认值。不接受关键字参数允许它比允许关键字参数的可能性更有效地运行。

关键是,参数并没有真正命名start,所以你不能通过名字传递它;您必须按位置传递它,例如:

sum([0,1,2], 1)
于 2018-12-21T00:01:08.060 回答