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