* args和** kwargs

时间:2018-05-31 13:40:07

标签: python

我有一个View,它调用另一个函数

class MyView(APIView):
    def post(self, request, *args, **kwargs):
        abc(a=1, b=2, c=3, *args, **kwargs)

我的功能

def abc(a, b, c, *args, **kwargs):
    pass

我面临的问题是,当我致电abc时,它会说abc() got multiple values for argument 'a'或有时会说abc() got multiple values for argument 'b'

调试一下后,我发现args正好有3个参数,因此(我猜)当*args传递给函数时,它与abc参数发生冲突。我该如何纠正?

2 个答案:

答案 0 :(得分:0)

有什么问题? :

kwargs dict包含键x作为键。

进行调用

abc(a=1, b=2, c=3, *args, **kwargs)

为参数x

发送两个值

其中x是"a", "b", "c"

中的任何一个

如何调试:

尝试打印kwargs

class MyView(APIView):
    def post(self, request, *args, **kwargs):
        print(kwargs)
        abc(a=1, b=2, c=3, *args, **kwargs)

能够调试这个。它将包含密钥"a", "b", "c"

我该如何解决这个问题:(一个肮脏的解决方案)

现在要解决问题,只需从kwargs中删除密钥:

class MyView(APIView):
    def post(self, request, *args, **kwargs):
        del kwargs['a']
        del kwargs['b']
        del kwargs['c']
        abc(a=1, b=2, c=3, *args, **kwargs)

答案 1 :(得分:-1)

class MyView(APIView):
    def post(self, request, *args, **kwargs):
        abc(a=1, b=2, c=3, args=args, kwargs=kwargs)