On Tue, Oct 27, 2015 at 11:18 AM, Guido van Rossum <guido@python.org> wrote:
IIRC it's an old micro-optimization; this was a common idiom at Zope. But I think it's way overused -- people believe it works so they do it all the time, even for code that's not performance sensitive, just because it's become a habit. (Like "register" in C in the '80s.)

On Tue, Oct 27, 2015 at 10:55 AM, Yury Selivanov <yselivanov.ml@gmail.com> wrote:
Serhiy,

On 2015-10-27 1:45 PM, Serhiy Storchaka wrote:
There is known trick to optimize a function:

    def foo(x, y=0, len=len, pack=struct.pack, maxsize=1<<BPF):
        ...
 
It's not a micro-optimization in this case:

def foo(x, SENTINEL=object()):
    ...

I don't like mangling function signatures to do this. What I really want is the equivalent of C's static here:

def foo(x):
    static SENTINEL = object()
    ...

This has two important semantics: (1) the scope of the SENTINEL variable is limited to the function foo; (2) it is only initialized once.

Hosting the value out of the function into a decorator like @asconstants is fine.

--- Bruce
Check out my new puzzle book: http://J.mp/ingToConclusions
Get it free here: http://J.mp/ingToConclusionsFree (available on iOS)