Jim Garrison wrote:
Luis Zarrabeitia wrote:On Tuesday 17 March 2009 06:04:36 pm Jim Garrison wrote: with open(filename, "rb") as f: for buf in iter(lambda: f.read(1000),''): do_something(buf)This is the most pythonic solution yet. Thanks to all the responders who took time to ponder this seemingly trivial question. I learned a lot about the Python mind-set.
I just tried the code as given above and it results in an infinite loop. Since f.read() returns a byte string when in binary mode, the sentinel has to be b''. Is there a value that will compare equal to both '' and b''? It's a shame the iter(o,sentinel) builtin does the comparison itself, instead of being defined as iter(callable,callable) where the second argument implements the termination test and returns a boolean. This would seem to add much more generality... is it worthy of a PEP? -- http://mail.python.org/mailman/listinfo/python-list
