Python iter()
A seemingly little-known use for the Python iter()
built-in: it can be used to tidy up code that would otherwise need a separate statement for assignment.
with open('text') as f:
for b in iter(lambda: f.read(1), ''):
something(b)
instead of:
with open('text') as f:
while True:
b = f.read(1)
if b == '': break
something(b)
A small extension to this idea can be constructed to allow for arbitrary exit conditions, as opposed to just equality to a single value:
def until(f, sentinel):
while True:
v = f()
if sentinel(v): break
yield v
with open('text') as f:
for b in until(lambda: f.read(1), lambda c: c in ('', '\n')):
something(b)