[Python-Dev] once [was: Simple Switch statementZ]

Ron Adam rrr at ronadam.com
Thu Jun 29 19:22:25 CEST 2006

Christos Georgiou wrote:
> I haven't followed the complete discussion about once, but I would assume it 
> would be used as such:
> once <name> = <expression>
> that is, always an assignment, with the value stored as a cellvar, perhaps, 
> on first execution 0f the code.
> Typically I would use it as:
> def function(a):
>     once pathjoin = os.path.join
>     <etc>

In the "name = (once expr)" form I gave, the property of a constant name 
that can't be rebound or that of a value that persists across function 
call invocations isn't needed.  I was trying to separate the different 
behaviors cleanly and clearly.

     # once as constant assignment and skipped line later.
     for n in range(x, 10):
         once startcube x**3     # assigns constant value, skips later
         print startcube
         startcube += 1          # give an exception

So this is the same as "const startcube x**3", except it's ignored if it 
is executed again instead of giving an excepton.

Here the constantness property isn't needed.

     # once as calc once, use result many times expression.
     for n in range(x, 10):
         startcube = (once x**3)     # calculated once used many
         print startcube
         startcube += 1              # Ok to do this

I wasn't suggesting which behavior (or combination of) is correct.  That 
would depend on what problem is meant to solved.

A fourth property of external has been touched on in these threads where 
  some of the suggestions require doing a calculation on a yet to be 
known value. That's usually handled by linkers in other languages and 
probably isn't something desired in a dynamic language like Python.


* I may not be able to reply, do to leaving on a trip.  Already should 
be gone. ;-)

More information about the Python-Dev mailing list