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 上运行
Windows 下 Python 3.6 下安装 TensorFlow (屡败屡战)