これは標準の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'の両方が** defined **になることが保証されます。 '。あなたはこれについて非効率的だと思いますか? –