In <[EMAIL PROTECTED]> Larry Bates <[EMAIL PROTECTED]> writes: >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()) Maybe I'm missing your point, the goal is to have a "runtime constant" associated with the function. In the your definition of foo, expensive_call gets called every time that foo gets called; this is what I'm trying to avoid! Maybe it's easier to see what I mean with JavaScript: function foo() { if (foo.x === undefined) foo.x = expensive_call(); return do_stuff_with(foo.x); } Here, expensive_call is called only once (assuming it never returns undefined). OK, I guess that in Python the only way to do what I want to do is with objects... kynn -- NOTE: In my address everything before the first period is backwards; and the last period, and everything after it, should be discarded. -- http://mail.python.org/mailman/listinfo/python-list