C-style static variables in Python?

Albert van der Horst albert at spenarnc.xs4all.nl
Thu Apr 15 16:38:22 CEST 2010


In article <mailman.1441.1270165718.23598.python-list at python.org>,
Steve Holden  <steve at holdenweb.com> wrote:
>Terry Reedy wrote:
>> On 4/1/2010 6:34 PM, kj wrote:
>>>
>>>
>>> When coding C I have often found static local variables useful for
>>> doing once-only run-time initializations.  For example:
>>>
>>> int foo(int x, int y, int z) {
>>>
>>>    static int first_time = TRUE;
>>>    static Mongo *mongo;
>>>    if (first_time) {
>>>      mongo = heavy_lifting_at_runtime();
>>>      first_time = FALSE;
>>>    }
>>>
>>>    return frobnicate(mongo, x, y, z);
>>
>> Global var or class or closure such as below (obviously untested ;=):
>>
>> make_foo()
>>   mongo = heavy_lifting_at_runtime();
>>   def _(x,y,z):
>>     return frobnicate(mongo, x, y, z)
>>   return _
>> foo = make_foo
>
>I suspect you mean
>
>foo = make_foo()
>
>> del make_foo # to make sure it is *never* called again ;
>>
>> Now you only have foo with a hard-to-access private object and no
>> first_time checks when you call it.
>>
>> Terry Jan Reedy
>>
>I don't think I'd ever want to use such an obscure technique in a
>program. You might want to consider using functools.wraps to make sure
>that the foo function looks right.

Imagine that heavy_lifting is only ever used here and uses 4 Gbyte of core.
Suddenly deleting those function objects seems the right thing to do,
instead of an obscure technique.
(I'm not sure the Python compiler could take advantage of this,
I know I could in my Forth compiler, under circumstances.)

>
>regards
> Steve
>--
>Steve Holden           +1 571 484 6266   +1 800 494 3119

Groetjes Albert

--
-- 
Albert van der Horst, UTRECHT,THE NETHERLANDS
Economic growth -- being exponential -- ultimately falters.
albert at spe&ar&c.xs4all.nl &=n http://home.hccnet.nl/a.w.m.van.der.horst




More information about the Python-list mailing list