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

<pre class="lang-cpp prettyprint-override"><code>void foo()
{
    static int counter = 0;
    counter++;
    printf("counter is %d\n", counter);
}
</code></pre>

<p>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?</p>

Use a generator function to generate an iterator.
```
```
def foo_gen():
    n = 0
    while True:
        n+=1
        yield n
```
```
Then use it like
```
```
foo = foo_gen().next
for i in range(0,10):
    print foo()
```
```
If you want an upper limit:
```
```
def foo_gen(limit=100000):
    n = 0
    while n < limit:
       n+=1
       yield n
```
```
If the iterator terminates (like the example above), you can also loop over it directly, like
```
```
for i in foo_gen(20):
    print i
```
```
Of course, in these simple cases it's better to use xrange :)
Here is the documentation on the
yield statement
.