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

Python 関数で静的変数を実装するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-05 12:06:12
オリジナル
549 人が閲覧しました

How Can I Implement Static Variables in Python Functions?

Python 関数での静的変数の実装

Python では、 C/C などの言語で見られるように、関数内で静的変数の動作を模倣することは、最初は次のように見えるかもしれません。複雑なタスク。ただし、この機能を実現するにはいくつかのアプローチがあります。

1 つの解決策には、関数自体の名前空間を利用することが含まれます。関数オブジェクトに属性を割り当てることで、そのスコープ内に静的変数を効率的に作成できます。次のコードを考えてみましょう。

def foo():
    foo.counter += 1
    print("Counter is %d" % foo.counter)

foo.counter = 0
ログイン後にコピー

このアプローチでは、関数の外でカウンター変数を初期化し、それを関数オブジェクトの名前空間に割り当てます。その結果、 foo() を呼び出すたびにカウンタが 1 ずつ増加し、複数の呼び出しにわたってその状態が維持されます。

あるいは、デコレータ関数を使用して静的変数の作成を自動化することもできます。次のデコレータ static_vars() は、キーワード引数を受け取り、デコレータ関数の属性として設定します。

def static_vars(**kwargs):
    def decorate(func):
        for k in kwargs:
            setattr(func, k, kwargs[k])
        return func
    return decorate
ログイン後にコピー

このデコレータを使用すると、foo() 関数を次のように記述できます。

@static_vars(counter=0)
def foo():
    foo.counter += 1
    print("Counter is %d" % foo.counter)
ログイン後にコピー

デコレーターは、カウンター変数が一度初期化され、foo() に関連付けられたままであることを保証します。 function.

これらのメソッドは関数レベルで静的変数を効果的にエミュレートしますが、 C/C とは異なり、Python 関数は特定のオブジェクト インスタンスにバインドされていないことに注意してください。したがって、フー。静的変数は関数オブジェクト自体に関連付けられているため、静的変数にアクセスする場合はプレフィックスが必要です。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート