static variables in Python?
pigmartian
scottpig1 at comcast.net
Tue Jul 29 21:38:01 EDT 2008
bearophileHUGS at lycos.com wrote:
> kj:
>> OK, I guess that in Python the only way to do what I want to do
>> is with objects...
>
> There are other ways, like assigning the value out of the function,
> because Python functions too are objects:
>
...
> But I suggest you to use a class in this situation, it's often the way
> that will keep your code more bug-free, and more readable by near-
> casual readers too. Python philosophy asks you to write readable code
> instead of clever code when possible, this is a difference from Perl,
> I presume.
>
> Bye,
> bearophile
Here's a solution using decorators, I like it, but I'm biased:
def staticAttrs(**kwds):
"""
Adds attributes to a function, akin to c-style
"static" variables
"""
def _decorator(fcn):
for k in kwds:
setattr(fcn, k, kwds[k])
return fcn
return _decorator
@staticAttrs(n=0)
def rememberCalls():
"""
>>> rememberCalls()
0
>>> rememberCalls()
1
>>> rememberCalls()
2
"""
print rememberCalls.n
rememberCalls.n += 1
~Scott
More information about the Python-list
mailing list