Compile time evaluation (aka eliminating default argument hacks)

Steven Bethard steven.bethard at gmail.com
Thu Feb 24 09:14:31 EST 2005


Nick Coghlan wrote:
> Time for another random syntax idea. . .
> 
> So, I was tinkering in the interactive interpreter, and came up with the 
> following one-size-fits-most default argument hack:
>
[snip]
> 
> But consider a syntax like the following:
> 
>     def f():
>         use x, y from:
>             y = x + 1  # [1]
>         print x, y
>
[snip]
> 
> Essentially, the function is compiled as usual, and emits code at the 
> location of the 'use' statement equivalent to that for "x, y = <const>". 
> The relevant entry in co_consts is populated by executing the body of 
> the 'use' statement with an implicit "return x, y" at the end. The 
> environment for that execution is the same as that for any function 
> defined at the same level as the containing scope of the 'use' statement 
> (e.g. module level in the example).

So just to clarify, the issue you're trying to address is when you want 
early binding like function default arguments get, but you don't want to 
declare the names as function arguments?

If I understand you right, I like the idea, though I'm undecided on your 
syntax for it at the moment...

STeVe



More information about the Python-list mailing list