[ python-Bugs-846564 ] "and" operator tests the first argument twice
SourceForge.net
noreply at sourceforge.net
Fri Nov 21 08:08:39 EST 2003
Bugs item #846564, was opened at 2003-11-21 14:08
Message generated for change (Tracker Item Submitted) made by Item Submitter
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=846564&group_id=5470
Category: Python Interpreter Core
Group: None
Status: Open
Resolution: None
Priority: 5
Submitted By: Amaury Forgeot d'Arc (amauryf)
Assigned to: Nobody/Anonymous (nobody)
Summary: "and" operator tests the first argument twice
Initial Comment:
When the first operand of "and" results in False, its truth
value is calculated again.
Example:
class myBool:
def __init__(self,value):
self.value = value
def __nonzero__(self):
print 'testing myBool(%s)' % self.value
return bool(self.value)
if myBool(0) and myBool(1):
pass
will print:
testing myBool(0)
testing myBool(0)
The same thing occurs with the "or" operator, when the
first argument has a True truth value:
if myBool(2) and myBool(3):
pass
will print:
testing myBool(2)
testing myBool(2)
This can be a problem when the "__nonzero__" function
is slow or has side-effects. I agree this is not often the
case...
But imagine an object which truth value means "there
are more data to read in a stream". If python evaluates
__nonzero__ twice, the expression: "stream and
otherTest()" can become True *without* evaluating the
otherTest!
----------------------------------------------------------------------
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=846564&group_id=5470
More information about the Python-bugs-list
mailing list