これが標準的な呼び出し (辞書など) であると仮定すると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
引数を 1 か所 (関数呼び出しの内部で、関数を複数の方法で呼び出すことができるかどうかをとにかくチェックする必要があります) でのみチェックします。すべてが素晴らしく清潔に保たれます。もちろん、これは (冒頭で述べたように)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)
注:この 2 番目のバージョンは、呼び出しているコードが表示されず、ドキュメントがない場合を除き、必要ありません。デフォルトの引数として使用None
することは非常に一般的であるため、最初の方法をそのまま使用できる可能性があります。呼び出している関数を変更できず、そのデフォルト引数が何であるかがわからない場合にのみラッパーメソッドを使用します(またはデフォルト引数はモジュール定数などですが、それはかなりまれです)。