question about True values

J. Clifford Dyer webmaster at
Sat Oct 28 23:32:38 CEST 2006

Steven D'Aprano wrote:
> On Sat, 28 Oct 2006 03:13:42 +0100, Steve Holden wrote:
>>> Finally, while True/False is a good mental mapping for numeric 
>>> comparisons, take the following:
>>>  >>> if "Cliff is a pillar of the open source community":
>>> ....	print "thank you"
>>> .... else:
>>> ....	print "bugger off"
>>> bugger off

First off, even though nobody has called me on it, this example really 
prints "thank you", not "bugger off".  I got confused in my cutting and 
pasting.  Sorry about that.

>>> Clearly this is not true.  (Google Cliff/Dyer open source: only 11 
>>> hits.), but the string is *something* so the if block gets evaluated.
>>   >>> if "The above example was bollocks":
>>   ...   print "You don't know what you are talking about"
>>   ... else:
>>   ...   print "Sorry: of course you are perfectly correct"
>>   ...
>> You don't know what you are talking about
> Cliff is making a point about semantics, and he's absolutely correct about
> it, although it is irrelevant since we're talking about two-value logic
> not semantics.

Thank you for the clarification Steven (D'Aprano).  To a certain level, 
I agree that semantics are important.  I hesitated about including that 
example in my post to begin with.  However, my point, and hopefully I'll 
be able to make it more clearly now, was that true/false is a useful way 
to think regarding logical statements like x == 3, but that when you are 
dealing with strings, or more accurately strings that represent 
language, you really aren't talking about truth any more, because in 
that context, truth cannot be divorced from semantics--somethingness, on 
the other hand, can.

Conceptually, you have to go through "'something' is true, and 'nothing' 
is false" before it makes sense.

On the other hand, (to play devil's advocate for a moment), when you are 
dealing with comparison operators, you have to go through "true 
statements yield something and false statements yield nothing" before it 
makes sense, or rather "yield a nothing value."  So either way you think 
about it, you have to, in some cases, mentally convert from truthiness 
to somethingness or vice versa.  I don't find it as odious to mentally 
convert the comparison operators as I do the declarative statements.  I 
don't think it's just a personal preference either, because that way 
your mental processes are in sync with the way python works.  It 
evaluates if the statement is true and yields a something value, and a 
nothing value if it's false.  You are working with the Tao of Python, if 
you'll forgive the analogy.  However thinking in terms of truth and then 
saying that all statements that exist are true works, but runs counter 
to what is going on behind the scenes.

Or maybe it doesn't, if everything's getting converted implicitly to 
bool anyway.  Maybe it is just personal preference after all.  But then 
bools are assigned "something" and "nothing" values....

This stuff is tricky, but I'm enjoying trying to wrap my mind around it, 
and appreciating the comments and critiques.


More information about the Python-list mailing list