Boolean tests [was Re: Attack a sacred Python Cow]

Erik Max Francis max at alcyone.com
Wed Jul 30 04:07:10 EDT 2008


Russ P. wrote:

> Oh, Lordy. I understand perfectly well how boolean tests, __len__, and
> __nonzero__ work in Python. It's very basic stuff. You can quit
> patronizing me (and Carl too, I'm sure).

You suggested a syntax for testing non-emptiness (`x is not empty`) 
which indicated a profound misunderstanding of what the `is` operator does.

You then acknowledged that there might be a problem because of the 
implication if the `is` operator and weren't sure whether it would work 
or not:

| But I guess that could only work if there were only one empty list
| that represents all empty lists (as there is only one actual "None").
| I don't know if that makes sense or not.

This ends with you still sounding confused about what the operator does, 
because that can't make sense if you take into account the meaning of 
the `is` operator (surely not all empty lists are the same object) and 
polymorphism (not all empty containers are empty lists).

Hey, everybody goofs.  But pointing figures here doesn't help, since 
it's not unreasonable to assume that someone who says something clearly 
misunderstanding a feature of the language, and followups to responses 
_continuing to be confused about it_, is, in fact, confused.  The only 
reason anyone thought you were confused was by your bizarre suggestion 
about the `empty` syntax and then your confused responses afterwards.

Maybe chalk it up to experience and move on?

> The point that you seem to be missing, or refuse to acknowledge for
> some reason, is that  "if x" can be mistakenly applied to any object
> when the programmer thinks that x is a list -- and the programmer will
> receive no feedback on the error.
> 
> I have made errors like that, and I could have saved some time had I
> used an "empty" method that only applies to a list or other sequence.

Well, that's what you get when you use a dynamic language.  There are 
times when `x + y` doesn't mean numeric addition, or in fact anything 
like it.  Or `x % y` where it _really_ doesn't mean anything like the 
modulus operator.  In dynamic languages, the effect of operations depend 
on their types.  There's really no way around that, and Boolean testing 
if an object as in `if x: ...` is no different.  It means different 
things depending on what `x` is.

-- 
Erik Max Francis && max at alcyone.com && http://www.alcyone.com/max/
  San Jose, CA, USA && 37 18 N 121 57 W && AIM, Y!M erikmaxfrancis
   The actor is not quite a human being -- but then, who is?
    -- George Sanders



More information about the Python-list mailing list