関数入力のデフォルト値をPythonの別の入力に等しく設定する
-
30-09-2019 - |
質問
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
有効な値になる可能性があり、解決策はどちらかを使用することです *args
/**kwargs
カールの答えのように魔法、または センチネルオブジェクト. 。これを行うライブラリが含まれます attrs と マシュマロ, 、そして私の意見では、それははるかにきれいで、おそらくより速いです。
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
.
「なし」の値をサポートしたい場合は、次のようなことができます。
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
所属していません StackOverflow