Message249992
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 |
|
Date |
User |
Action |
Args |
2015-09-06 13:14:21 | ezio.melotti | set | recipients:
+ ezio.melotti, rhettinger, ncoghlan |
2015-09-06 13:14:21 | ezio.melotti | set | messageid: <1441545261.7.0.192244822349.issue25014@psf.upfronthosting.co.za> |
2015-09-06 13:14:21 | ezio.melotti | link | issue25014 messages |
2015-09-06 13:14:21 | ezio.melotti | create | |
|