为什么我不能在范围函数上使用关键字参数?

时间:2015-03-08 12:54:36

标签: python

在python文档中,它说:

  

任何函数参数,无论是非可选的还是可选的(具有默认值)都可以作为关键字参数调用,只要其中一个参数名称匹配即可。但是,关键字参数必须遵循所有位置参数。

我试过了:

kwargs = {'step':-1, 'start':10, 'stop':5}
list(range(**kwargs))

但是python给了男人一个错误:

TypeError: range() takes no keyword arguments

为什么会这样?

2 个答案:

答案 0 :(得分:10)

range()不是 python 函数。它是C型; C类型遵循不同的参数规则,range()只接受位置参数。

请参阅Calls expressions documentation

  

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

range()的位置参数未命名,因此不能用作关键字参数。

答案 1 :(得分:1)

您现在知道,真正的答案是range是一个C函数,由于某种原因,它没有相同的python规则(很高兴知道为什么)。

但是您可以改为这样做:

range(*{'start':0,'stop':10,'step':2}.values())