Python接受CPython函数中的关键字参数?

时间:2012-11-04 08:03:04

标签: python keyword-argument python-3.3

我使用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中的哪些函数接受关键字参数,哪些函数不接受?当然 - 为什么?

1 个答案:

答案 0 :(得分:11)

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

CPython implementation details here

对此进行了解释
  

CPython实现细节:实现可能提供内置功能   位置参数没有名称的函数,即使它们也是如此   为了文档的目的而被“命名”,因此   不能通过关键字提供。在CPython中,情况就是如此   在C中实现的函数,使用PyArg_ParseTuple()来解析它们   参数。