Python 3.6 sum() 是不是有 `start=0` 关键字参数? [复制]

Posted

技术标签:

【中文标题】Python 3.6 sum() 是不是有 `start=0` 关键字参数? [复制]【英文标题】:Does Python 3.6 sum() have `start=0` keyword argument? [duplicate]Python 3.6 sum() 是否有 `start=0` 关键字参数? [复制] 【发布时间】:2019-05-21 12:00:35 【问题描述】:

这似乎很基本,但由于它与 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

这是怎么回事?

【问题讨论】:

不,它没有。很多这些内置函数都有位置参数,看起来可能是关键字参数 但是如果你这样做sum([0,1,2], 1)你会得到4 【参考方案1】:

原型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)

【讨论】:

有趣。是否有关于 / 的文档? @DimaLituiev:我找不到 good 文档,但提到了 under item #10 in the Argument Clinic docs on converting your first function。 Argument Clinic 是一项旨在简化 C 级内置函数的文档和解析函数参数的计划。 有an open bug to document them,在PEP 570也有提及。

以上是关于Python 3.6 sum() 是不是有 `start=0` 关键字参数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何让 python3 命令运行 Python 3.6 而不是 3.5?

Pandas Python 程序在 Python3、3.8 但不是 3.6 上运行

BZOJ3670: [Noi2014]动物园

Windows 下 Python 3.6 下安装 TensorFlow (屡败屡战)

Python 3.6 SSL - 使用TLSv1.0而不是TLSv1.2密码 - (2路身份验证和自签名证书)

python 3.6 JsonResponse 问题