Ezio Melotti added the comment:
FTR one of the reason that led me to itercm() is:
with open(fname) as f:
transformed = (transform(line) for line in f)
filtered = (line for line in lines if filter(line))
# ...
Now filtered must be completely consumed before leaving the body of the `with`
otherwise this happens:
>>> with open(fname) as f:
... transformed = (transform(line) for line in f)
... filtered = (line for line in lines if filter(line))
...
>>> # ...
>>> next(filtered)
ValueError: I/O operation on closed file.
With itercm() it's possible to do:
f = itercm(open(fname))
transformed = (transform(line) for line in f)
filtered = (line for line in lines if filter(line))
...
# someone consumes filtered down the line lazily
# and eventually the file gets closed
itercm() could also be used (abused?) where a regular `with` would do just fine
to save one extra line and indentation level (at the cost of an extra import),
e.g.:
def lazy_cat(fnames):
for fname in fnames:
yield from itercm(open(fname))
instead of:
def lazy_cat(fnames):
for fname in fnames:
with open(fname) as f:
yield from f
----------
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue25014>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com