我有一对带有关键字参数的函数,如下所示:
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
答案 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)
。