python - 如何将元组作为关键字参数传递 (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
解决方案
当您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)
推荐阅读
- javascript - TypeError:无法读取未定义的属性“名称”。我找不到出现此错误的原因。我正在使用 mysql、nodejs 和 ejs 作为视图引擎
- c++ - 我可以将向量作为 initial_sum 和不同的函数传递给 std::accumulate 吗?
- android - 如何使用recaptcha v3?
- azure - Azure AD B2C - 只有通过自定义策略才能在首次登录场景中重置密码?
- javascript - 在从 firebase 获取值之前执行图表
- r - 在 observeEvent 中更新输入并更改 ui
- reactjs - 如何在 React 中只请求一次 API 数据,而不是每次访问时都呈现页面?
- javascript - Flask Socket IO 响应超时错误
- flutter - Flutter 从 1 个脚本调用小部件
- python-3.x - python asyncio 无法异步运行两个无限函数