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 
> restriction.
> 
> 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.

Colin W.



More information about the Python-list mailing list