【发布时间】:2021-11-09 17:13:04
【问题描述】:
我正在编写如下函数:
def create_objection(name, position, **kwargs):
dicct = {'name':name,
'position':position}
print(len(kwargs))
dicct.update({'extra_info': kwargs})
return dicct
这个函数应该总是获取名称和位置,并最终获取 for 或字典中的键/值对集合。 我想要的是以下工作方式:
create_objection('c1',{'t':1})
输出:
0
{'name': 'c1', 'position': {'t': 1}, 'extra_info': {}}
当我尝试这个时,我得到一个错误:
create_objection('c1',{'t':1},{'whatever':[3453,3453]},{'whatever2':[34,34]})
错误:
TypeError Traceback (most recent call last)
/tmp/ipykernel_32291/2973311999.py in <module>
----> 1 create_objection('c1',{'t':1},{'tt':2,'ttt':'3'})
TypeError: create_objection() takes 2 positional arguments but 3 were given
我想得到:
{'name': 'c1', 'position': {'t': 1}, 'extra_info': [{'whatever':[3453,3453]},{'whatever2':[34,34]}]}
如何进行?
【问题讨论】:
-
发布实际的整个堆栈跟踪。问题很可能在那里被阐明。问题很可能是因为您给函数提供了太多位置参数。
**kwargs参数意味着它接受任何关键字元素。 -
如前所述,kwargs 用于
keyword=value类型的参数。看起来您正在使用字典作为位置参数。 -
d = {'t':1, 'whatever':[3453,3453],'whatever2':[34,34]} def create_objection(*arg, **kwargs): pass create_objection ('c', d)
-
添加了错误和结果。还有更多解释
标签: python methods keyword-argument