引数の既定値の動的生成 Python編


引数の既定値の動的生成 Python編

Pythonでは引数の既定値を動的に生成する簡単な方法がありません。
しかし、関数内部で処理をすることで、疑似的に実現可能です。
この記事ではその方法を紹介します。

理想的な動的生成

期待したい動作

関数を引数省略で起動するたびに、
ユーザー入力で既定値を動的に生成する。

コード

def add(p1 = input(), p2 = input()):
    return p1 + p2;

if __name__ == "__main__":
    print(add());
    print(add());

実際に起こること

関数の定義時にinput()関数が実行され、
その入力結果が以後すべての関数起動時に、
引数の既定値として固定される。
よって、期待された結果とならない。

代替策

コード

def add(p1 = "", p2 = ""):
    if [p1, p2] == ["", ""]:
        p1, p2 = input(), input();
    
    return (p1 + p2);
    
    

if __name__ == "__main__":
    print(add());
    print(add());

実際に起こること

関数の起動ごとに、
引数省略時はinput()関数が起動され、
事実上動的に引数の既定値が生成される。

まとめ

Pythonでは動的な引数の既定値生成ができません。
しかし、空文字やNoneなどを仮に与えておき、
内部でそれを動的に置き換えることはできます。
これを利用して、疑似的な引数既定値の
動的生成が可能です。

  • このエントリーをはてなブックマークに追加

PAGE TOP