在python文档中,它说:
任何函数参数,无论是非可选的还是可选的(具有默认值)都可以作为关键字参数调用,只要其中一个参数名称匹配即可。但是,关键字参数必须遵循所有位置参数。
我试过了:
kwargs = {'step':-1, 'start':10, 'stop':5}
list(range(**kwargs))
但是python给了男人一个错误:
TypeError: range() takes no keyword arguments
为什么会这样?
答案 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())