[Python-Dev] PEP 377 - allow __enter__() methods to skip the statement body
P.J. Eby
pje at telecommunity.com
Sun Mar 15 22:23:31 CET 2009
At 06:28 AM 3/16/2009 +1000, Nick Coghlan wrote:
>There are some practical hurdles to that idea (specifically, creating a
>callable which uses its parent's namespace rather than having its own),
>but the basic concept seems sound.
Actually, that bit's pretty simple -- they're just "nonlocal"
variables. But the cost of creating that function, and the cost of
having cell variables in the surrounding function is potentially
high. (In CPython at least, function calls are optimized in certain
ways when the function only has "fast" locals, and no "cell" locals.)
The cost of creating the function (though not the code object) could
be held till runtime, since the interpreter could wait until it's
sure there's a __with__ method before doing a MAKE_CLOSURE on the code object.
Of course, at that point, what's the difference between:
with foo() as bar:
baz
and...
@foo
def bar():
baz
except for being slightly less verbose? (due to missing nonlocal
statements, etc.)
More information about the Python-Dev
mailing list