我使用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中的哪些函数接受关键字参数,哪些函数不接受?当然 - 为什么?
答案 0 :(得分:11)
使用PyArg_ParseTuple()解析其参数的CPython函数不支持关键字参数(主要是因为PyArg_ParseTuple()
仅支持位置参数,例如简单序列)。
CPython implementation details
here:
CPython实现细节:实现可能提供内置功能 位置参数没有名称的函数,即使它们也是如此 为了文档的目的而被“命名”,因此 不能通过关键字提供。在CPython中,情况就是如此 在C中实现的函数,使用
PyArg_ParseTuple()
来解析它们 参数。