Andrii V. Mishkovskyi wrote:
Just before you start writing a PEP, take a look at `takewhile' function in `itertools' module. ;)
OK, after reading the itertools docs I'm not sure how to use it in this context. takewhile() requires a sequence, and turning f.read(bufsize) into an iterable requires iter() (no?) which wants to do its own termination testing. The following kludge would subvert iter()'s termination testing but this is starting to look Perlishly byzantine. with open(filename, "rb") as f: for buf in itertools.takewhile( \ lambda b:b, \ iter(lambda: f.read(1000),None)): do_something(buf) As opposed to with open(filename, "rb") as f: for buf in iter(lambda: f.read(1000), lambda b:b)): do_something(buf) where iter(callable,callable) is defined to 1) call the first argument 2) pass the returned value to the second argument 3) yield the first result and continue if the return value from the second call is True, or terminate if False -- http://mail.python.org/mailman/listinfo/python-list