簡體   English   中英

如何通過元組作為關鍵字參數(kwarg)

[英]How to Pass a Tuple as a Keyword Argument (kwarg)

我有一對帶有關鍵字參數的函數,如下所示:

def update(self, uri, **properties):
    self._req("POST", uri, properties)

def _req(self, method, frag, data=None):
    resp = requests.request(method, self.url + frag,
                            data=json.dumps(data, default=_json_serial),
                            verify=self.verify,
                            auth=self.credentials,
                            headers={'Content-Type': 'application/json'})

我不清楚這是如何發生的,但是功能如下:我調用update(uri, status=1)並將其作為dict傳遞給_req()

作為程序的一部分,我想編寫一個如下函數:

def updateIP(uri, **kwargs):        
    for d in kwargs.items(): 
        swis.update(uri, **dict([d])))

updateIP(uri='orion.x.com', status=1, sysname="test")

現在,按照書面形式,它可以正常工作,但是最后將其轉換為dict看起來有點丑陋。 有沒有更清潔的方法? 如果我只是將其作為**d傳遞,則給我錯誤的builtins.TypeError: update() argument after ** must be a mapping, not tuple

當你調用updateIP鍵-值對status=1, sysname="test" ,同樣應該調用swis.update()的鍵值對。

您的循環方式:

for d in kwargs.items():  

給您一對(元組),這不是您傳遞關鍵字參數的方式。

您可以直接通過字典。

例如。

def updateIP(uri, **kwargs):        
    for d in kwargs: 
        swis.update(uri,**kwargs)
def updateIP(uri, **kwargs):        
    for k, v in kwargs.items(): 
        swis.update(uri, **{k: v})

這是可悲的,你不能POST所有properties與一氣呵成swis.update(uri, **kwargs)

暫無
暫無

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

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