# [Tutor] True/False evaluations?

Liam Clarke cyresse at gmail.com
Wed Dec 1 12:17:28 CET 2004

```Hi all,

Got myself in a twist around logic of functions, I'll show you what I mean.

>>> def x():
... 	return 0
...
>>> def y():
... 	return []
...
>>> x()
0
>>> y()
[]
>>> x()==False
True
>>> y()==False
False
>>> x()== y()
False
>>> if not x():
... 	print 'x is false'
... else:
... 	print 'guess x is true'
...
x is false
>>> if not y():
... 	print 'y is false'
... else:
... 	print 'hmmm'
...
y is false

It's  y() not being False (or True), but evaluating as true for 'if
not y()' which gets me, as I thought that [], 0, None, False, & {} all
evaluated the same.

General query however -

>>> def k():
... 	return [], 0
...
>>> print k()
([], 0)
>>> if not k():
... 	print "It's false"
... else:
... 	print 'This tuple is going to cause me grief'
...
This tuple is going to cause me grief

So, as k() returns a tuple, it's not false, even though the tuple
contains two zero values. Is there a way I could do something like?

for item in k():
if not item:
#do something

on one line? i.e. check for true/false of any value returned by  k(),
whether it be a 2 or 20 digits long tuple

Um,
--
'There is only one basic human right, and that is to do as you damn well please.
And with it comes the only basic human duty, to take the consequences.
```