[Python-ideas] with-statement syntactic quirk
Nick Coghlan
ncoghlan at gmail.com
Sun Nov 4 16:41:35 CET 2012
On Mon, Nov 5, 2012 at 12:32 AM, Barry Warsaw <barry at python.org> wrote:
> On Nov 02, 2012, at 08:41 AM, Nick Coghlan wrote:
>
>>> Go's "defer" is quite a neat solution for these hassles if anyone's in
>>the mood for a time machine discussion.
>>>
>>> http://golang.org/doc/effective_go.html#defer
>>
>>Go was one of the reference points for the ExitStack design (it's a large
>>part of why the API also supports providing callbacks directly to the exit
>>stack, not just as context managers).
>
> Is it fair to say that the difference between Go's defer and ExitStack is that
> the latter gives you the opportunity to clean up earlier than at function
> exit?
Yep. You can also do some pretty interesting things with ExitStack
because of the pop_all() operation (which moves all of the registered
operations to a *new* ExitStack instance).
I wrote up a few of the motivating use cases as examples and recipes
in the 3.3 docs:
http://docs.python.org/3/library/contextlib#examples-and-recipes
I hope to see more interesting uses over time as more people explore
the possibilities of a dynamic tool for composing context managers
without needing to worry about the messy details of unwinding them
correctly (ExitStack.__exit__ is by far the most complicated aspect of
the implementation).
Cheers,
Nick.
--
Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia
More information about the Python-ideas
mailing list