[Python-Dev] Why are contexts also managers? (was r45544 - peps/trunk/pep-0343.txt) (original) (raw)
Guido van Rossum guido at python.org
Thu Apr 20 14:41:59 CEST 2006
- Previous message: [Python-Dev] Why are contexts also managers? (was r45544 - peps/trunk/pep-0343.txt)
- Next message: [Python-Dev] Why are contexts also managers? (was r45544 - peps/trunk/pep-0343.txt)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On 4/20/06, Nick Coghlan <ncoghlan at gmail.com> wrote:
Phillip J. Eby wrote: > At 11:41 PM 4/19/2006 +1000, Nick Coghlan wrote: >> Given that naming though, I think contextlib.contextmanager should be >> renamed to contextlib.context. > > The name is actually correct under this terminology arrangement. > @contextmanager returns a context manager.
That's like saying we should describe the result of calling a generator function as a generator-iterable because it has an iter method. The longer name made sense when "context manager" was the term for the object with enter and exit methods (the way I originally wrote it when updating the PEP after the addition of the context method). While I agree that flipping the terminology the other way around makes sense, it also flips the effect of calling a decorated generator function so that what it returns is now appropriately termed a generator-context (since it provides enter and exit methods directly). These contexts are context managers only in the same sense that iterators are also iterables. We shouldn't break the parallels between iterable-iterator and context manager-context without a good reason - and so far I haven't heard one.
Sorry Nick, but you've still got it backwards. The name of the decorator shouldn't indicate the type of the return value (of calling the decorated generator) -- it should indicate how we think about the function. Compare @staticmethod and @classmethod -- the return type doesn't enter into it. I think of the function/generator itself as the context manager; it returns a context.
(Yet another analogy: if generators had to be decorated explicitly, we'd name it @generator, even though what it returns when called is properly an iterator.)
-- --Guido van Rossum (home page: http://www.python.org/~guido/)
- Previous message: [Python-Dev] Why are contexts also managers? (was r45544 - peps/trunk/pep-0343.txt)
- Next message: [Python-Dev] Why are contexts also managers? (was r45544 - peps/trunk/pep-0343.txt)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]