簡體   English   中英

* args和** kwargs

[英]*args and **kwargs

我有一個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參數沖突。 我該如何糾正?

問題是什么?

kwargs dict包含密鑰x作為密鑰。

打電話

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

發送參數x兩個值

其中x是"a", "b", "c"任何"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)
class MyView(APIView):
    def post(self, request, *args, **kwargs):
        abc(a=1, b=2, c=3, args=args, kwargs=kwargs)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM