Lambda going out of fashion
Alex Martelli
aleaxit at yahoo.com
Thu Dec 23 07:37:50 EST 2004
Peter Otten <__peter__ at web.de> wrote:
> Alex Martelli wrote:
>
> > if len(somecontainer) > 0:
> >
> > instead of the obvious
> >
> > if somecontainer:
> >
> > so it's not as if pythonistas in general are blessed with some magical
> > "redundancy avoidance spell"...
>
> That is not always equivalent:
>
> >>> z = Numeric.zeros(5)
> >>> z
> array([0, 0, 0, 0, 0])
> >>> bool(z)
> False
> >>> len(z) > 0
> True
Good point! Numeric sure has semantics here that can be confusing;-).
numarray's arrays just can't be used as the argument to bool(...) -- you
get a runtime error "An array doesn't make sense as a truth value. Use
sometrue(a) or alltrue(a)" ("in the face of ambiguity, refuse the
temptation to guess"). Still, this ALSO means that len(z)>0 is very
different from bool(z), for numarray as for Numeric.
Most containers don't choose to implement __nonzero__, so bool(z) just
calls __len__ instead; that's the scenario I had in mind, of course.
But sure, if somecontainer might define peculiar semantics in
__nonzero__, then in order to test if it's empty you can't use the
normal pythonic idiom of checking its truth value, but rather must check
its length. (I still prefer "if len(z):", avoiding the redundant ">0",
but that's just a small difference, of course).
Alex
More information about the Python-list
mailing list