1. ホーム
  2. python

[解決済み] Pythonの関数内の静的変数に相当するものは何ですか?

2022-03-14 14:14:36

質問

このC/C++のコードに相当するPythonの慣用句は何でしょうか?

void foo()
{
    static int counter = 0;
    counter++;
    printf("counter is %d\n", counter);
}

具体的には、クラスレベルではなく、関数レベルでどのように静的メンバを実装するのでしょうか?また、関数をクラス内に配置することで、何か変化があるのでしょうか?

どのように解決するのですか?

少し逆ですが、これでうまくいくはずです。

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

カウンターの初期化コードを下部ではなく上部に配置したい場合は、デコレータを作成します。

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
    print "Counter is %d" % foo.counter

この場合でも foo. の接頭辞が必要です。

(クレジット オニ )