On Sun, 15 Jul 2012 03:34:46 -0500, Andrew Berg wrote: > This has probably been discussed before,
By the hoary hosts of Hoggoth, has it ever! > but why is there an implicit > conversion to a boolean in if and while statements? It's nothing to do with if and while. All Python objects are duck-typed as bools. 1) It's generally part of the duck-typing philosophy. If an object quacks like a bool, why not treat it as a bool? 2) It's useful and convenient for short-circuit boolean expressions such as any(), all(), and various things like: for x in mylist or []: ... is better than: if mylist is not None: for x in mylist: ... 3) Rather than distinguishing "true" from "false", a more useful dichotomy is between "something" and "nothing". Python includes a number of ways of spelling "nothing" of various types, such as: None, 0, 0.0, '', [], {}, set() and nearly everything else is "something". 4) Other languages such as Ruby, Javascript, PHP, Clojure and others also distinguish between true-like and false-like ("truthy" and "falsey") values. Although some of them have made some pretty weird and arbitrary choices for what counts as true-like and false-like, without Python's general principle that "nothing" values should be false. (E.g. Javascript considers Boolean(false) to be a true value!!!) 5) Prior to Python 2.2, there was no bool type and no True and False values. In fact, here is an impassioned plea from an educator begging Guido not to introduce True and False to the language, because duck-typed truthy/falsey values are *so much better*. http://groups.google.com/group/comp.lang.python/msg/2de5e1c8384c0360?hl=en Sadly, or happily, Python did grow True and False values, but the fundamental distinction between something and nothing still exists. (For the record, I can only think of one trap for the unwary: time objects are false at *exactly* midnight.) -- Steven -- http://mail.python.org/mailman/listinfo/python-list