関数内の静的変数のPython相当は何ですか?

PYTHON3 チュートリアル

Pythonにおける関数内の静的変数の相当する方法

Pythonには、C++やJavaのような静的変数の機能は直接サポートされていません。しかし、関数内で状態を保持するための代替手段がいくつかあります。その中でも、関数内にネストされた関数やクロージャを使用する方法が静的変数に近い機能を実現できます。

関連する知識

Pythonでは、関数内で変数を定義するとその変数はその関数のローカルスコープになります。これは通常、関数が呼び出されるたびに変数が初期化されることを意味します。しかし、クロージャを使用することで、関数内の変数を保持し、状態を保持することができます。

明確な例

def outer_function():
    static_variable = 0

    def inner_function():
        nonlocal static_variable
        static_variable += 1
        return static_variable

    return inner_function

increment = outer_function()

print(increment())  # Output: 1
print(increment())  # Output: 2

この例では、outer_function内でstatic_variableを定義し、inner_function内でそれを更新しています。毎回increment関数が呼び出されるたびに、static_variableが1ずつ増加します。

結果

上記のコードを実行すると、increment関数を呼び出すたびにstatic_variableが増加し、状態が保持されることが確認できます。

静的変数のような振る舞いを実現するために、クロージャを活用することで関数内で状態を保持することができます。

他にも、デコレータやクラスを使用する方法などもありますが、クロージャを使った方法が最もシンプルで直感的な方法と言えます。

Pythonにおける関数内の静的変数の相当する概念は、関数内で値を保持するために使用される「nonlocal変数」です。通常、関数内で変数を定義すると、その変数はその関数内でのみ有効であり、関数が呼び出されるたびに初期化されます。しかし、nonlocal変数を使用すると、関数内でその変数の値を保持し続けることができます。これにより、関数内での状態の保持や変更が可能となります。

購読
通知
0 Comments
Inline Feedbacks
View all comments