我正在编写一个 api,并且想知道执行以下操作的最 Pythonic 方式是什么。
我正在编写一堆方法来进行各种网络调用,参数主要转换为发布数据键和值。
到目前为止,我一直在写它的方式大多是这样的;
def doSomething(self,param1,param2,param3):
payload={"param1":param1,
"param2":param2,
"param3":param3}
return self.request("do/something",payload)
这已经具有必须重复可能更改的参数名称的缺点,但是这种模式还不错。
下面的案例让我想出更好的方法。在这种情况下,调用有 4 个可选参数
def doSomethingElse(self,param1,param2=None,param3=None,param4=None,param5=None):
payload= {"param1":param1}
if param2:
payload["param2"]= param2
if param3:
payload["param3"]= param3
# ... etc ...
self.request("do/something/else",payload)
我的第一个想法是这样做:
def doSomethingElse(self,param1,**params):
payload = {"param1":param1}
payload.update(params)
self.request("do/something/else",payload)
甚至:
def doSomethingElse(self,**payload):
self.request("do/something/else",payload)
尽管第二个很好而且很简单,但是可以在没有非默认参数的情况下调用该方法。但是在这两种情况下,我在使用 api 时都会丢失方法签名,并且用户不会知道参数是什么(我知道我可以在文档字符串中编写预期的签名,但我宁愿防止发送拼写错误的关键字)。
我认为必须有一个很好的pythonic解决方案来做到这一点,有什么想法吗?
编辑
我认为我没有说清楚的一个关键点是参数是在调用中的 post 数据中发送的,我想确保只有这些键可以发送,就像在第一个示例中一样doSomethingElse
,你可以' t 发送除这 5 个命名参数之外的任何内容。