ホームページ >バックエンド開発 >Python チュートリアル >Python で静的関数変数をシミュレートするにはどうすればよいですか?

Python で静的関数変数をシミュレートするにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-04 17:56:11115ブラウズ

How Can I Simulate Static Function Variables in Python?

Python の静的関数変数と同等

問題:
C/C と同様に、Python は関数内に静的変数をどのように実装しますか? s 関数で定義された静的メンバー変数レベル?

答え:

Python では、関数内の静的変数に直接相当するものはありません。ただし、ネストされた関数とクロージャを組み合わせて同様の機能を実現できます。

def foo():
    def counter():
        if not hasattr(foo, "counter_value"):
            foo.counter_value = 0
        foo.counter_value += 1
        return foo.counter_value
    return counter

ここでは、関数 foo() がネストされた関数 counter() を定義しています。外部関数 foo() は、counter() のクロージャーとして機能し、分離された名前空間を提供します。

カウンターにアクセスしてインクリメントするには、次のように呼び出します。

counter = foo()
counter()  # Initializes the counter
counter()  # Increments the counter

デコレーターのアプローチ:

もう 1 つのアプローチは、デコレーターを使用して静的オブジェクトを作成することです。 variable:

def static_vars(**kwargs):
    def decorate(func):
        for k in kwargs:
            setattr(func, k, kwargs[k])
        return func
    return decorate

@static_vars(counter=0)
def foo():
    foo.counter += 1
    return foo.counter

この構文を使用すると、静的変数をより簡単に初期化してアクセスできますが、foo を使用する必要があります。接頭辞。

以上がPython で静的関数変数をシミュレートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。