【Python】**kwargs和takes 1 positional argument but 2 were given
Python的函数定义中可以在参数里添加**kwargs——简单来说目的是允许添加不定参数名称的参数,并作为字典传递参数。但前提是——你必须提供参数名。
例如下述情况:
有如下输入:
这一切都符合常理。但是当我使用一个字典传递的时候:
我一开始以为是__init__太娇气了,换成一般办法:
包括定义在__main__下的函数也是如此:
但是当我在f1参数前加一个参数名:
问题立刻解决。
思考:
我们在先前的错误尝试中,一直传入的是个单纯的字典。虽然**kwargs提供将参数转成字典的功能,但是直接传入字典并不会使其理解成参数。实质上Python解释器认为我们输入的是作为参数值的字典,而并未携带参数名称,而Python函数机制中“固定名称”的参数应写在**kwargs的前面,因此误以为我们传入了一个“固定名称”参数,事实上我们先前的定义中并未加入“固定名称”参数,所以报错takes 1 positional arguments but 2 was given。
如果真的要传入字典怎么办呢?这就简单了,直接把**kwargs改成kwargs即可:
这次经历使我加深了对**kwargs特殊参数的理解。以后的学习更要注意细节!
Break your stereo days. Whatever they say you will never stop to believe in yourself. Brave invisible world. You know that it's true you can find the new way.

浙公网安备 33010602011771号