假设这是一个标准的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
作为默认参数非常常见,因此您可以使用第一种方式。如果你不能修改你调用的函数,并且你不知道它的默认参数是什么(或者它的默认参数是模块常量或者某些东西,但这很少),我只会使用包装器方法。
是的,但如果我的一个变量没有被定义那么'apicall(颜色,大小)'会抛出一个错误,不是吗? – user1328021
好的,谢谢......你写的是我如何设想完成的,但我一直认为必须有更高效的方法...... – user1328021
@ user1328021假设这两行都执行:'color = request.GET .get('color')'和 'size = request.GET.get('size')',那么'color'和'size'都保证**定义**,尽管它们可能是None '。你认为这样做效率低下? –