Strict and non-strict evaluation
Functional programming's efficiency stems, in part, from being able to defer a computation until it's required. The idea of lazy or non-strict evaluation is very helpful. It's so helpful that Python already offers this feature.
In Python, the logical expression operators and
, or
, and if-then-else
are all non-strict. We sometimes call them short-circuit operators because they don't need to evaluate all arguments to determine the resulting value.
The following command snippet shows the and
operator's non-strict feature:
>>> 0 and print("right") 0 >>> True and print("right") right
When we execute the preceding command snippet, the left-hand side of the and
operator is equivalent to False
; the right-hand side is not evaluated. When the left-hand side is equivalent to True
, the right-hand side is evaluated.
Other parts of Python are strict. Outside the logical operators, an expression is evaluated eagerly...