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;
    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?


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:

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

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

(Credit: @ony)