[英]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.