On Tue, Aug 2, 2011 at 10:15 PM, Steven D'Aprano <steve+comp.lang.pyt...@pearwood.info> wrote: > I'm not greatly experienced with context managers and the with statement, so > I would like to check my logic. > > Somebody (doesn't matter who, or where) stated that they frequently use this > idiom: > > spam = MyContextManager(*args) > for ham in my_iter: > with spam: > # do stuff > [snip] > # Simple example using built-in file context manager. > >>>> spam = open('aaa') >>>> for ham in range(5): > ... with spam: > ... print ham > ... > 0 > Traceback (most recent call last): > File "<stdin>", line 2, in <module> > ValueError: I/O operation on closed file
file_context = lambda: open('aaa') for i in range(3): with file_context(): print "hello" .. but if the context is short it is clearer and time saving to _not_ alias it. If the context is sufficiently complicated then it is worth it to make the complex code into a first class context manager - contextlib.contextmanager makes this very easy and extremely readable. -Jack -- http://mail.python.org/mailman/listinfo/python-list