Ответ 1
Различие заключается в том, что в случае ленивой оценки выражение оценивается только тогда, когда оно необходимо, тогда как в случае оценки короткого замыкания оценка выражения останавливается сразу после того, как вы знаете результат. Это своего рода ортогональные понятия.
Ленивая оценка может быть применена к любым вычислениям (схема короткого замыкания обычно используется только с bools). Он не отключает бесполезные вычисления, но задерживает все вычисления до тех пор, пока не потребуется его результат.
variable = bigAndSlowFunc() or evenSlowerFnc()
if (carry out heavy computations)
print "Here it is: ", variable
else
print "As you wish :-)"
Если оценка ленива, variable
будет вычисляться, только если мы перейдем в первую ветвь (then
) if
, иначе она не будет. На этапе оценки (когда мы готовим аргументы для print
) схему короткого замыкания можно использовать, чтобы решить, нужно ли нам называть evenSlowerFnc
.
Итак, в вашем примере это оценка короткого замыкания, так как без задержки вычислений не происходит.