这看起来很基本,但是由于它与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
这是怎么回事?
原型中的/
是一种约定,这意味着它之前的所有参数都只是位置性的;它们不能通过关键字传递。Python 中定义的函数不能做到这一点(至少,不仅仅是接受参数到*args
并手动解压缩内容,尽管链接的 PEP 建议也允许 Python 级函数的语法),但由于 sum
是 C 中内置实现的,它可以做到这一点(它实际上是在内部手动解包, 但可以宣传更有用的原型),并更轻松地定义默认值。不接受关键字参数允许它比允许关键字参数的可能性更有效地运行。
关键是,参数并没有真正命名start
,所以你不能按名称传递它;你必须在位置上传递它,例如:
sum([0,1,2], 1)