7

我使用 python3.3 并发现它在它的一些CPython 函数中接受关键字参数:

>>> "I like python!".split(maxsplit=1)
['I', 'like python!']

但其他一些函数接受关键字参数:

>>> sum([1,2,3,4], start = 10)
Traceback (most recent call last):
  File "<pyshell#58>", line 1, in <module>
    sum([1,2,3,4], start = 10)
TypeError: sum() takes no keyword arguments

我的问题是:这些功能之间有什么区别?CPython 中哪些函数接受关键字参数,哪些函数不接受?当然——为什么?

4

1 回答 1

11

使用PyArg_ParseTuple()解析其参数的 CPython 函数不支持关键字参数(主要是因为PyArg_ParseTuple()仅支持位置参数,例如简单序列)。

这在CPython implementation details 这里解释:

CPython 实现细节:实现可以提供其位置参数没有名称的内置函数,即使它们是出于文档目的而“命名”的,因此不能由关键字提供。PyArg_ParseTuple()在 CPython 中,在 C 中实现的用于解析其参数的函数就是这种情况。

于 2012-11-04T08:11:59.077 回答