In article <mailman.1441.1270165718.23598.python-l...@python.org>, Steve Holden <st...@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. alb...@spe&ar&c.xs4all.nl &=n http://home.hccnet.nl/a.w.m.van.der.horst -- http://mail.python.org/mailman/listinfo/python-list