В документации по модулю itertools я нашел этот комментарий
def dotproduct(vec1, vec2):
return sum(imap(operator.mul, vec1, vec2))
Обратите внимание, что многие из приведенных выше рецептов можно оптимизировать, заменив глобальные поиски локальными переменными, определенными в качестве значений по умолчанию.,Например, рецепт точечного продукта может быть записан в виде:
def dotproduct(vec1, vec2, sum=sum, imap=imap, mul=operator.mul):
return sum(imap(mul, vec1, vec2))
Как это?
Есть ли заметное ускорение на практике (которое может уравновесить неудобствабольшая сигнатура функции)?
В каких конкретных условиях использование локальных переменных в случае, как показано на рисунке, будет уместным?.
Редактировать: Я проверил с помощью timeit, и естьлюбая существенная разница.
Для двух списков из 40 элементов, таких как vec1, vec2:
глобальный поиск -> 3.22720959404
локальный поиск -> 3.19884065683
,есть только ок.1% прирост.