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

Reply via email to