質問

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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top