static variables in Python?
Larry Bates
larry.bates at websafe.com`
Tue Jul 29 16:57:27 EDT 2008
kj wrote:
> Yet another noob question...
>
> Is there a way to mimic C's static variables in Python? Or something
> like it? The idea is to equip a given function with a set of
> constants that belong only to it, so as not to clutter the global
> namespace with variables that are not needed elsewhere.
>
> For example, in Perl one can define a function foo like this
>
> *foo = do {
> my $x = expensive_call();
> sub {
> return do_stuff_with( $x, @_ );
> }
> };
>
> In this case, foo is defined by assigning to it a closure that has
> an associated variable, $x, in its scope.
>
> Is there an equivalent in Python?
>
> Thanks!
>
> kynn
First names in Python are just that, names that point to objects. Those objects
can contain any type of information including other objects. They are NOT
buckets where things are stored.
1) Names (variables in Perl/C) defined within a Python function are placed in
its local namespace. They are not visible in the global namespace.
2) Yes you can have a local name point to a global. This is often used in
classes with attributes because looking up local is somewhat quicker than
looking up the class attribute.
def foo():
x = expensive_call
return do_stuff_with(x())
In this particular case it doesn't really help.
It would be more useful in something like:
class foo(object):
def __init__(self, initialvalue = 0)
self.currentvalue = initialvalue
def longloopingmethod(self, listtosum):
currentvalue = self.currentvalue
for v in listtosum:
currentvalue += v
BTW - There are BETTER ways to sum a list, so this is just an example.
-Larry
More information about the Python-list
mailing list