On Wed, 11 May 2011 11:48:16 +0200, Laurent Claessens wrote: > Once I wrote something like: > > def f(x=None): > if x: > print x > else: > print "I have no value" > > > The caller of that function was something like f(cos(2*theta)) where > theta come from some computations. > > Well. When it turned out that theta was equal to pi/4, I got "I have no > value". I spent a while to figure out the problem :)
I believe you are grossly oversimplifying whatever code you had. Using the definition of f from above: >>> theta = math.pi/4 >>> f(math.cos(2*theta)) 6.12303176911e-17 But even if you rounded the result of cos(2*theta) to zero, you will get the same result regardless of whether you test for "if x" or "if x != 0". > Conclusion: the boolean value of an object is to be used with care in > order to tests if an optional parameter is given or not (when default > value is None). Or, to put it another way: if you want to test for an object being None, test for the object being None. -- Steven -- http://mail.python.org/mailman/listinfo/python-list