小编典典

函数中静态变量的 Python 等价物是什么?

all

这个 C/C++ 代码的惯用 Python 等价物是什么?

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

具体来说,与类级别相比,如何在函数级别实现静态成员?将函数放入类中会改变什么吗?


阅读 132

收藏
2022-03-02

共1个答案

小编典典

有点颠倒,但这应该有效:

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.前缀。

2022-03-02