Boolean tests [was Re: Attack a sacred Python Cow]
Colin J. Williams
cjw at ncf.ca
Tue Jul 29 15:50:27 CEST 2008
Heiko Wundram wrote:
> Am Dienstag, 29. Juli 2008 11:15:05 schrieb Heiko Wundram:
>> I can't dig up a simple example from code I wrote quickly...
> Just to get back to that: an example I found where "if x" (the generic
> __nonzero__() test) will work to test for emptiness/non-emptiness of a
> container, whereas "if len(x) > 0" (the "specific" test for this example)
> will not, is my for own integer set type I wrote a while back (which you can
> find on ASPN).
> The corresponding set type allows you to create infinitely sized sets of
> integers (which of course are stored as pairs of <start>,<stop>-values, so
> the storage itself for the set is bounded), for which len(x) does not have
> a "proper" meaning anymore, and __len__() is limited to returning a (platform
> dependent) ssize_t anyway IIRC, so even with a bounded set, the length of the
> set might not necessarily be accessible using len(x); that's why the set type
> additionally got a member function called .len() to work around this
> I should think is a non-contrieved example where the generic test whether the
> object considers itself True/False (which for containers means
> non-empty/empty) is preferrable over the special case test whether the length
> is positive. A polymorphic function, which for example only accesses the
> first ten members of the container is able to work with an infinite set if it
> uses the generic test, but is not in case it uses len(x) > 0.
(+1) This an Heiko's previous post sets
things out clearly.
More information about the Python-list