首页 > 解决方案 > 如何将元组作为关键字参数传递 (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)传递给它。_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

标签: python

解决方案


当您updateIP使用键值对调用时status=1, sysname="test",同样您应该使用键值对调用 swis.update()。

你循环的方式:

for d in kwargs.items():  

给你一个 pair(tuple) 这不是你传递关键字参数的方式。

您可以按原样传递字典。

例如。

def updateIP(uri, **kwargs):        
    for d in kwargs: 
        swis.update(uri,**kwargs)

推荐阅读