On Thu, 23 Jun 2016 01:12 pm, Larry Hudson wrote: > On 06/22/2016 12:42 AM, Lawrence D’Oliveiro wrote: > [snip] >> I feel that’s a needlessly complicated rule. It would have been simpler >> if boolean operators (and conditional expressions like in if-statements >> and while-statements) only allowed values of boolean types. But that’s >> one of the few warts in the design of Python... >> > > Wart?? I *strongly* disagree. I find it one of the strengths of Python, > it enhances Python's > expressiveness. Of course, everyone is entitled to their own > opinion...and this is mine.
Allowing any value as a truth value is just applying the principle of duck-typing to booleans. There are a pair of canonical truth values, namely True and False, but any object can quack like a truth value. We often call them: - true and false (as opposed to True and False); - true-like and false-like; - truthy and falsey values. Among the builtins, there's a general principle: - values that represent something should be truthy; - values that represent nothing should be falsey. So we have falsey values: - None - zeroes (0, 0.0, 0j, etc) - empty dict {} - empty sets and frozensets - empty strings '' and b'' (in Python 2: u'' and '') - empty lists, tuples and other sequences and truthy values: - object - non-zero numbers - non-empty dicts - non-empty sets and frozensets - non-empty strings - non-empty sequences This is an improvement over other languages like Javascript, Ruby, etc where the division between truthy and falsey appears to be fairly arbitrary. -- Steven -- https://mail.python.org/mailman/listinfo/python-list