Hot off Python inventor Guido van Rossum’s stunning endorsement of last week’s deep dive into function attributes, here’s a little tidbit from an ongoing series of Python minutiae I’m calling Baby Snakes.
(Before continuing, I should disclaim that this is my personal opinion on a matter of style. Coding is an art—even bad code can be art—and one could easily raise practical and aesthetic arguments against my opinions on code style.)
Using Boolean Expressions
I occasionally see inexperienced (and not-so-inexperienced) developers use this pattern:
What’s wrong with it? Although syntactically and logically correct, it suggests a novice understanding of the nature of boolean expressions.
An expression is a piece of code that evaluates to a value.
1 + 1 is an expression that evaluates to
2. Function calls are expressions since they always evaluate to a value (even if that value is an implicitly returned
None). A boolean expression is an expression that evaluates to
False. In the above snippet, the code between
: is a boolean expression.
Evaluating Expressions to a Variable
Everyone feels comfortable assigning the result of a mathematical operation or function call to a variable. As noted above, mathematical operations and function calls are both expressions. Why should boolean expressions be treated any differently?
In place of a multi-line
if/else statement, assign the result of the boolean expression directly to the variable:
This pattern works with any combination of logical, comparison, identity, and membership operators:
Boolean Ternary Expressions
An even less stylish pattern than multi-line
if/else statements is misuse of conditional expressions, like this funny one-liner:
Conditional expressions evaluate to either the leftmost or rightmost value depending on whether the expression between
else evaluates to
False. It’s redundant to wrap a boolean expression in a conditional expression if that conditional expression is merely returning
False; you can assign the result of the boolean expression directly to a variable and avoid the conditional expression syntax entirely.