Обсуждение с другом привело к следующей реализации:
>>> import dis
>>> i = lambda n: n*24*60*60
>>> dis.dis(i)
1 0 LOAD_FAST 0 (n)
3 LOAD_CONST 1 (24)
6 BINARY_MULTIPLY
7 LOAD_CONST 2 (60)
10 BINARY_MULTIPLY
11 LOAD_CONST 2 (60)
14 BINARY_MULTIPLY
15 RETURN_VALUE
>>> k = lambda n: 24*60*60*n
>>> dis.dis(k)
1 0 LOAD_CONST 4 (86400)
3 LOAD_FAST 0 (n)
6 BINARY_MULTIPLY
7 RETURN_VALUE
Второй пример явно более эффективен, просто уменьшив количество инструкций.
Мой вопрос в том, есть ли название для этой оптимизации и почему это не происходит в первом примере?
Кроме того, я не уверен, что это дубликат Почему GCC не оптимизирует a * a * a * a * a * a (a * a * a ) * (a * a * a)?; если это объясняется, пожалуйста, еще немного, поскольку это относится к Python.