YAI: syntax for preset locals without using dummy args with d efaults

Delaney, Timothy tdelaney at avaya.com
Mon Jan 13 02:09:53 CET 2003

> From: Skip Montanaro [mailto:skip at pobox.com]
>     Bengt> Right now we often see
>     Bengt>     def foo(x, y=default, z=some_expression):
>     Bengt>         ...
> This is just a performance hack and should be addressed by 
> other means,
> e.g., more efficient access to global variables.  See, for 
> example, PEPs 266
> and 267.  I believe other not-yet--PEPped proposals have been 
> floated as
> well.

Well, in *some* circumstances (very rare) it's not just a performance hack.

Specifically, if globals() goes away for some reason, you may not be able to
look up the name anymore. Binding it to via a default value allows you to
keep the reference.

In nearly every case though, doing this is a Bad Thing(TM). The *only* case
I've ever seen this is in my coverage module, where I blow everything away
in order to set up a "clean" environment for the module to be covered and
restore it afterwards. The module to be covered also thinks it's the
__main__ module ... ;) Plus the default values are *also* a performance

Tim Delaney

More information about the Python-list mailing list