pythonstatic

What is the Python equivalent of static variables inside a function?


What is the idiomatic Python equivalent of this C/C++ code?

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

specifically, how does one implement the static member at the function level, as opposed to the class level? And does placing the function into a class change anything?


Solution

  • A bit reversed, but this should work:

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

    If you want the counter initialization code at the top instead of the bottom, you can create a decorator:

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

    Then use the code like this:

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

    It'll still require you to use the foo. prefix, unfortunately.

    (Credit: @ony)