2 回答

TA贡献1869条经验 获得超4个赞
我怀疑您是否可以将其传递给 **kwargs,因为它似乎是按值传递的,但如果可以修改内部函数,您可以将 kwargs 作为普通字典传递,即没有**.
def test(x):
print(x)
x.pop('test')
print(x)
def real(**kwargs):
test(kwargs)
print(kwargs)
real(test='nothing', real='something')
输出
{'test': 'nothing', 'real': 'something'}
{'real': 'something'}
{'real': 'something'}

TA贡献1824条经验 获得超6个赞
问题是您没有将字典传递给_handle_kwargs
. 调用函数时的 **kwargs 语法实际上“爆炸”了 kwargs。
也就是说,如果 kwargs 是 {'a':1, 'b':2},则_handle_kwargs(False, **kwargs)
等价于_handle_kwargs(False, kwargs['a'], kwargs['b'])
. 你根本没有通过kwargs
字典!
_handle_kwargs
将它们收集到新字典中,因此不会影响原始字典。
解决方案非常简单。
首先,def _handle_kwargs(keep, kwargs):
没有星号。只需收到一个字典。其次,这样称呼它:
def normal_function(**kwargs) debug, some_other_kwarg = _handle_kwargs(False, kwargs)
请参阅第二行 -_handle_kwargs
不带星号的调用 - 只需传递 dict。
添加回答
举报