假设这是一个标准get
调用(例如在字典上),这应该很容易。使用None
参数的默认值定义函数,然后通过color
且size
无需费心检查它们!
def apicall(color=None, size=None):
pass # Do stuff
color = request.GET.get('color')
size = request.GET.get('size')
apicall(color, size)
这样,您只需要None
在一个地方检查参数(在函数调用内部,无论如何都必须检查函数是否可以通过多种方式调用)。一切都保持良好和清洁。当然,这假设(就像我在顶部说的那样)您的get
调用就像是普通的Python字典的get
方法,None
如果找不到该值,则会返回。
最后,我注意到您的函数名称是apicall
:您实际上可能无法访问函数代码本身。在这种情况下,由于您可能对函数签名的默认值一无所知并且None
可能是错误的,因此我可能只编写一个简单的包装器为您执行参数检查。然后,您可以如上所述调用包装器!
def wrapped_apicall(color=None, size=None):
if color is None and size is None:
return apicall()
# At least one argument is not None, so...
if size is None:
# color is not None
return apicall(color)
if color is None:
# size is not None
return apicall(size)
# Neither argument is None
return apicall(color, size)
除非您看不到要调用的代码并且没有任何文档,否则 不需要 第二个版本!使用None
的默认参数是很常见的,所以有机会,你可以只使用第一种方式。如果您无法修改正在调用的函数并且不知道其默认参数是什么(或者其默认参数是模块常量之类的东西,但这很少见),我只会使用wrapper方法。