[Python-ideas] for line in input with open(path) as input...

Shane Green shane at umbrellacode.com
Sat Feb 2 16:16:41 CET 2013


Thanks Nick.  I definitely see your point about iterwith(); have been 
thinking about that since someone asked where __exit__() would be invoked.

I meant the following as a more compact way of expressing

for line in file with open(path) as file:
     process(line)

As a more compact way of expressing

with open(path) as file:
     for line in file:
         process(line)

Not a change to the semantics of for-loops; a point my iterwith() 
function has confuses greatly, I realize now. I'm not seeing a loss of 
separation of concerns there.

Indentation levels aren't limited, but flatter is better ;-)

I saw a bunch of back and forth regarding iteration and context 
management in the PEP, but didn't notice anything along these lines in 
particular . I'll have to go back and take a closer look.



Nick Coghlan wrote:
>
> The with statement block is needed to define *when* cleanup happens 
> (unconditionally at the end of the block).
>
> The "iterwith" generator is currently pointless, as it results in 
> nondeterministic cleanup of the context manager, so you may as well 
> not bother and just rely on the underlying iterable's nondeterministic 
> cleanup.
>
> We're never going to add cleanup semantics directly to for loops because:
> - separation of concerns is a good design principle
> - Indentation levels are not a limited resource (anyone that thinks 
> they are may be forgetting that factoring out context managers, 
> iterators and subfunctions gives you more of them, and that judicious 
> use of early returns and continue statements can avoid wasting them)
> - we already considered it when initially designing the with statement 
> and decided it was a bad idea.
>
> I forget where that last part is written up. If it's not in PEP 343, 
> 342, 346 or 340 (the full set of PEPs that led to the current with 
> statement and contextlib.contextmanager designs), it should be in one 
> of the threads they reference.
>
> Cheers,
> Nick.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20130202/57c88fad/attachment.html>


More information about the Python-ideas mailing list