Teoretycznie, hammar's answer i duffymo's answer są dobrymi przypuszczeniami. Jednak w praktyce, na moim komputerze, to nie bardziej efektywne:
>>> 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
Częścią problemu jest operacja .
. Jeśli importujesz plik sqrt
bezpośrednio do przestrzeni nazw, uzyskujesz niewielką poprawę.
>>> timeit.timeit(stmt='[sqrt(n) for n in range(100)]', setup='from math import sqrt', number=10000)
0.15312695503234863
Słowo kluczowe istnieje: niewielkie.
Dalsze testowanie wskazuje, że wraz ze wzrostem liczby zwiększa się korzyść, którą można uzyskać dzięki użyciu sqrt
. Ale wciąż nie przez wiele!
>>> 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
Zawsze można zmierzyć samodzielnie za pomocą 'timeit'. Dla zapisu 'math.sqrt' jest dla mnie tylko o około 5% szybszy. – delnan