A problem with the "list of expensive functions" style is that not everything we want to do will necessarily be a pure function.  I.e. if it is, this is great:

fs = [expensive_1, expensive_2, expensive_3]
for f in fs:
    x = f(known, args, here)
    if x:
        break

But sometimes you want more general expressions that might be expensive.  Nonetheless, using while/break gets us the early exit just as well:

while True:
    x = expensive_1() + 1
    if x: break
    x = expensive_2() // 2
    if x: break
    x = expensive_3() % 3
    if x: break
    x = default_value
    break

Honestly that isn't very verbose.  And also, while the def/return approach is similar, it *does* require passing in all the relevant lexical elements needed into the function (well, or using a closure), and that's a bit more bookkeeping possibly.




--
Keeping medicines from the bloodstreams of the sick; food
from the bellies of the hungry; books from the hands of the
uneducated; technology from the underdeveloped; and putting
advocates of freedom in prisons.  Intellectual property is
to the 21st century what the slave trade was to the 16th.