Если у меня есть выражение, которое я хочу оценить в Python, например выражение для r
в фрагменте кода ниже, будет ли интерпретатор Python разумным и повторно использует подрезультат x+y+z
, или просто оценит его дважды? Мне также было бы интересно узнать, будет ли ответ на этот вопрос одинаковым для скомпилированного языка, например C.
x = 1
y = 2
z = 3
r = (x+y+z+1) + (x+y+z+2)
Было высказано предположение, что этот вопрос похож на этот вопрос. Я считаю, что это похоже. Тем не менее, я считаю, что связанный вопрос - это не "минимальный пример". Также в связанном вопросе нет двусмысленности относительно порядка операций, например, в примерах, аналогичных этому вопросу, где нет определенного порядка операций (математически), в зависимости от порядка вызовов отдельных функций (которые неоднозначно), может быть сделана худшая или лучшая работа по оптимизации. Рассмотрим (abba) (abba) (baa * b), есть вложенные повторяющиеся подстроки, и в зависимости от порядка и объема предварительной обработки может быть выполнено много разных оптимизаций.