On Sat, Apr 16, 2011 at 1:24 PM, candide <candide@free.invalid> wrote: > Consider the following code : > > # -------------------------------------- > def bool_equivalent(x): > return True if x else False > > > # testing ... > > def foo(x): > return 10*x > > class C: > pass > > for x in [42, ("my","baby"), "baobab", max, foo, C] + [None, 0, "", [], > {},()]: > print bool(x)==bool_equivalent(x) > # -------------------------------------- > > > Is the bool_equivalent() function really equivalent to the bool() built-in > function ?
The ternary operator, if-statement, and `while` all do the equivalent of an implicit bool() on their condition, so bool_equivalent() will always give the same result as bool() because it's indeed using the moral equivalent of bool() behind the scenes. That is, `True if x else False` conceptually gets compiled down to `True if bool(x) == 1 else False` (but without doing a run-time lookup of "bool"). Cheers, Chris -- http://blog.rebertia.com -- http://mail.python.org/mailman/listinfo/python-list