[Python-ideas] use context managers for new-style "for" statement

Raymond Hettinger python at rcn.com
Sat Feb 21 00:23:45 CET 2009


>    for i in closing(gen(x)):
> 
> if you want the generator closed automatically.

That doesn't really improve on what we have now:

    with closing(gen(x)) as g:
        for i in g:

The proposed syntax puts to much on one-line and
unnecessarily complicates another one of Python's 
fundamental tools.


> We might also add a new context manager to contextlib to do both the 
> close and the throw.  Maybe call it throwing_to?
> 
>    for i in throwing_to(gen(x)):

This looks somewhat unattractive to my eyes.


> Comments?

I think the "problem" you're solving isn't worth solving.



Raymond


## untested recipe

def closeme(iterable):
 it = iter(iterable)
 try:
  for i in it:
   yield i
 finally:
   it.close()


# doesn't this do this same thing without any interpreter magic?
for i in closeme(gen(x)):
   ...

for i in chain.from_iterable(map(closeme, [it1, it2, it3, it4])):
   ...



More information about the Python-ideas mailing list