Operator Precedence/Boolean Logic

Elizabeth Weiss cake240 at gmail.com
Thu Jun 23 00:23:49 EDT 2016


On Wednesday, June 22, 2016 at 11:59:44 PM UTC-4, Steven D'Aprano wrote:
> 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

Thanks, Steven!


More information about the Python-list mailing list