我试图更好地理解将条件变量实现到 python 请求的 http 请求中的方法。
我正在做以下事情:
def make_post(parameter1_value, parameter2='None'):
payload = {
"parameter1": parameter1_value,
"parameter2": "None"
}
r = requests.post('https://myrequesturl.com/location/', params=payload)
我正在尝试找到不在参数中包含 "parameter2": "None" 值的最佳方法,除非该值不等于 None。
我意识到我可以有几个条件语句来根据参数选择适当的请求格式,但是对于函数中所需的每个额外的 parameterN 来说,它会变得难以扩展。
我想知道是否有一种方法可以在 payload 中包含条件类型的变量,只有当它不等于默认值集时才会包含该参数;在本例中为“无”。
因此,如果 parameter2 的值 = None:
payload = {
"parameter1": parameter1_value
}
但如果 parameter2 的值 = None 以外的任何值
payload = {
"parameter1": parameter1_value,
"parameter2": "Non_default_value"
}
我试图避免以下类型的方法:
if some_parameter != 'None':
payload = {
"one": "arrangement"
}
if some_some_other_parameter != 'None':
payload = {
"one": "arrangement"
}
在只有两个参数的例子中似乎有点不切实际,但如果我有一个带有许多参数的函数,那么一行包含/排除类型表达式似乎会大大减少所需的整体代码量。当我想不出如何让 python 做一些聪明的事情时,这是我的经验,这只是因为我不知道怎么做,而不是 python 不能。
请您参考如下方法:
是这样的吗?
def foo(v1, v2=None):
params = {k:v for k,v in locals().items() if v!=None}
print params
foo('hello')
foo('hello', 'world')
输出:
{'v1': 'hello'}
{'v1': 'hello', 'v2': 'world'}
或者
是这样的吗?
def foo(a={}, url=''):
params = {k:v for k,v in a.items() if v!=None}
print params
foo({'k1':'v1','k2':2,'k3':None, 'k4':'v4'})
foo()
输出:
{'k2': 2, 'k1': 'v1', 'k4': 'v4'}
{}
