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

这是怎么回事?

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

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

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

相关内容

  • 没有找到相关文章

最新更新