我们经常有这样的函数:
def my_func(arg1, arg2, arg3=None, arg4=None):
params = dict(arg1=arg1, arg2=arg2)
if arg3:
params["arg3"] = arg3
if arg4:
params["arg4"] = arg4
response = requests.post("https://...", data=params)
被击中的端点将不满意参数中的键设置为None
的值。它预计,如果arg3
或arg4
是不需要的,它将不会出现在params
。
是否有一种构造参数字典的简写方式,使得每个可选参数不需要一个if语句?比
好看的东西:params = (
dict(arg1=arg1, arg2=arg2)
| (dict(arg3=arg3) if arg3 else {})
| (dict(arg4=arg4) if arg4 else {})
)
def my_func(arg1, arg2, **kwargs):
optional_kwargs = ['arg3','arg4']
params = dict(arg1=arg1, arg2=arg2)
params.update({k:v for k,v in kwargs.items() if k in optional_kwargs})
response = requests.post("https://...", data=params)
就是我要做的…
您可以将所有内容添加到字典中,然后过滤出None
值:
def my_func(arg1, arg2, arg3=None, arg4=None):
params = {k: v for k, v in dict(arg1=arg1, arg2=arg2, arg3=arg3, arg4=arg4).items() if v is not None}
...