Teóricamente, hammar's answer y duffymo's answer son buenas conjeturas. Pero en la práctica, en mi máquina, no es más eficiente:
>>> import timeit
>>> timeit.timeit(stmt='[n ** 0.5 for n in range(100)]', setup='import math', number=10000)
0.15518403053283691
>>> timeit.timeit(stmt='[math.sqrt(n) for n in range(100)]', setup='import math', number=10000)
0.17707490921020508
Parte del problema es la operación .
. Si importa sqrt
directamente en el espacio de nombres, obtiene una ligera mejora.
>>> timeit.timeit(stmt='[sqrt(n) for n in range(100)]', setup='from math import sqrt', number=10000)
0.15312695503234863
palabra clave existe: ligero.
Las pruebas adicionales indican que a medida que el número aumenta, la ventaja que obtiene al usar sqrt
aumenta. ¡Pero todavía no por mucho!
>>> timeit.timeit(stmt='[n ** 0.5 for n in range(1000000)]', setup='import math', number=1)
0.18888211250305176
>>> timeit.timeit(stmt='[math.sqrt(n) for n in range(1000000)]', setup='import math', number=1)
0.18425297737121582
>>> timeit.timeit(stmt='[sqrt(n) for n in range(1000000)]', setup='from math import sqrt', number=1)
0.1571958065032959
Siempre puede medirlo usted mismo con 'timeit'. Para el registro, 'math.sqrt' es solo aproximadamente un 5% más rápido para mí. – delnan