Hlelp clean up clumpsy code
Jp Calderone
exarkun at divmod.com
Tue Jan 4 11:43:34 EST 2005
On Tue, 04 Jan 2005 08:18:58 -0800, Scott David Daniels <scott.daniels at acm.org> wrote:
>Nick Coghlan wrote:
> > A custom generator will do nicely:
> >
> > Py> def flatten(seq):
> > ... for x in seq:
> > ... if hasattr(x, "__iter__"):
> > ... for y in flatten(x):
> > ... yield y
> > ... else:
> > ... yield x
>
> Avoiding LBYL gives you:
> def flatten(seq):
> for x in seq:
> try:
> for y in flatten(x):
> yield y
> except TypeError:
> yield x
But totally messes up on error handling. Instead:
def flatten(seq):
for x in seq:
try:
subseq = iter(x)
except TypeError:
yield x
else:
for subx in flatten(subseq):
yield subx
to avoid catching TypeErrors from .next().
Jp
More information about the Python-list
mailing list