Death to tuples!

Duncan Booth duncan.booth at invalid.invalid
Thu Dec 1 05:35:40 EST 2005


Antoon Pardon wrote:

> I know what happens, I would like to know, why they made this choice.
> One could argue that the expression for the default argument belongs
> to the code for the function and thus should be executed at call time.
> Not at definion time. Just as other expressions in the function are
> not evaluated at definition time.
> 
Yes you could argue for that, but I think it would lead to a more complex 
and confusing language.

The 'why' is probably at least partly historical. When default arguments 
were added to Python there were no bound variables, so the option of 
delaying the evaluation simply wasn't there. However, I'm sure that if 
default arguments were being added today, and there was a choice between 
using closures or evaluating the defaults at function definition time, the 
choice would still come down on the side of simplicity and clarity.

(Actually, I think it isn't true that Python today could support evaluating 
default arguments inside the function without further changes to how it 
works: currently class variables aren't in scope inside methods so you 
would need to add support for that at the very least.)

If you want the expressions to use closures then you can do that by putting 
expressions inside the function. If you changed default arguments to make 
them work in the same way, then you would have to play a lot more games 
with factory functions. Most of the tricks you can play of the x=x default 
argument variety are just tricks, but sometimes they can be very useful 
tricks.



More information about the Python-list mailing list