如何通过元组作为关键字参数(kwarg)

时间:2018-12-04 10:40:58

标签: python

我有一对带有关键字参数的函数,如下所示:

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

2 个答案:

答案 0 :(得分:0)

在使用键值对updateIP调用status=1, sysname="test"时,类似地,应使用键值对调用swis.update()。

循环方式:

for d in kwargs.items():  

为您提供一对(元组),这不是您传递关键字参数的方式。

您宁愿照原样通过字典。

例如。

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

答案 1 :(得分:0)

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

可悲的是,您无法POST一次properties一次swis.update(uri, **kwargs)