代码之家  ›  专栏  ›  技术社区  ›  Dima Lituiev Tom Roth

Python 3.6 sum()是否有'start=0'关键字参数?[副本]

  •  1
  • Dima Lituiev Tom Roth  · 技术社区  · 7 年前

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

    这是怎么回事?

    1 回复  |  直到 7 年前
        1
  •  7
  •   ShadowRanger    7 年前

    这个 / 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)