Pythonでは機能しない次の関数について考えてみますが、これを使用して、何をする必要があるかを説明します。
def exampleFunction(a, b, c = a):
...function body...
つまり、代替値が指定されていない限り、変数が取るc
のと同じ値を変数に割り当てたいのです。a
上記のコードはPythonでは機能しません。これを行う方法はありますか?
Pythonでは機能しない次の関数について考えてみますが、これを使用して、何をする必要があるかを説明します。
def exampleFunction(a, b, c = a):
...function body...
つまり、代替値が指定されていない限り、変数が取るc
のと同じ値を変数に割り当てたいのです。a
上記のコードはPythonでは機能しません。これを行う方法はありますか?
def example(a, b, c=None):
if c is None:
c = a
...
キーワード引数のデフォルト値を変数にすることはできません(変数の場合、関数の定義時に固定値に変換されます)。通常、メイン関数に引数を渡すために使用されます。
def main(argv=None):
if argv is None:
argv = sys.argv
None
有効な値である可能性がある場合、解決策は、carlの回答のように/ magicを使用するか、センチネル*args
オブジェクトを使用することです。これを行うライブラリには、attrsとMarshmallowが含まれ、私の意見では、はるかにクリーンで、おそらく高速です。**kwargs
missing = object()
def example(a, b, c=missing):
if c is missing:
c = a
...
真になるための唯一の方法は、そこで作成したダミーオブジェクトであるということです。c is missing
c
この一般的なパターンは、おそらく最良で最も読みやすいものです。
def exampleFunction(a, b, c = None):
if c is None:
c = a
...
None
の有効な状態ではないことに注意する必要がありますc
。
'None'値をサポートする場合は、次のようにすることができます。
def example(a, b, *args, **kwargs):
if 'c' in kwargs:
c = kwargs['c']
elif len(args) > 0:
c = args[0]
else:
c = a
1つのアプローチは次のようなものです。
def foo(a, b, c=None):
c = a if c is None else c
# do something