Establecer variables locales para una función en lugar de utilizar globales optimiza la función

En la documentación del módulo de itertools encontré este comentario.

def dotproduct(vec1, vec2): return sum(imap(operator.mul, vec1, vec2)) 

Tenga en cuenta que muchas de las recetas anteriores se pueden optimizar reemplazando las búsquedas globales con variables locales definidas como valores predeterminados. Por ejemplo, la receta de dotproduct se puede escribir como:

 def dotproduct(vec1, vec2, sum=sum, imap=imap, mul=operator.mul): return sum(imap(mul, vec1, vec2)) 

¿Cómo es?.
¿Hay un aumento de velocidad notable en la práctica (que podría equilibrar los inconvenientes de la firma de función más grande)?
¿En qué condiciones específicas sería relevante el uso de variables locales en un caso como el que se muestra?

Edit: he probado con timeit y hay alguna diferencia relevante.
Para dos listas de 40 elementos como vec1, vec2:

búsqueda global -> 3.22720959404
búsqueda local -> 3.19884065683

    es decir, solo ca. 1% de ganancia.

    ¿Hay un aumento de velocidad notable en la práctica (que podría equilibrar los inconvenientes de la firma de función más grande)?

    Lo dudo mucho, ya que las búsquedas se realizan una vez cada una en la definición original. Tenga en cuenta que ha cambiado el significado de la función.

    ¿En qué condiciones específicas sería relevante el uso de variables locales en un caso como el que se muestra?

    Sólo dentro de un bucle apretado; en este caso, si se dot_product en decir una multiplicación de matriz muy grande (que de todos modos no haría en Python puro, y mucho menos con iteradores).

    EDITAR : acabo de desarmar ambas funciones y mi corazonada estaba mal, aunque mi punto sigue en pie:

     >>> def dotproduct(vec1, vec2): ... return sum(imap(operator.mul, vec1, vec2)) ... >>> dis.dis(dotproduct) 2 0 LOAD_GLOBAL 0 (sum) 3 LOAD_GLOBAL 1 (imap) 6 LOAD_GLOBAL 2 (operator) 9 LOAD_ATTR 3 (mul) 12 LOAD_FAST 0 (vec1) 15 LOAD_FAST 1 (vec2) 18 CALL_FUNCTION 3 21 CALL_FUNCTION 1 24 RETURN_VALUE >>> def dotproduct(vec1, vec2, sum=sum, imap=imap, mul=operator.mul): ... return sum(imap(mul, vec1, vec2)) ... >>> dis.dis(dotproduct) 2 0 LOAD_FAST 2 (sum) 3 LOAD_FAST 3 (imap) 6 LOAD_FAST 4 (mul) 9 LOAD_FAST 0 (vec1) 12 LOAD_FAST 1 (vec2) 15 CALL_FUNCTION 3 18 CALL_FUNCTION 1 21 RETURN_VALUE