from time import perf_counter
import math
from math import sin
def timer(func):
def inner(*args, **kwargs):
t0 = perf_counter()
func(*args, **kwargs)
print(func.__name__, perf_counter() - t0)
return inner
@timer
def test1():
for _ in range(5000000):
math.sin(1)
@timer
def test2():
for _ in range(5000000):
sin(1)
@timer
def test3():
sin_local = math.sin
for _ in range(5000000):
sin_local(1)
test1()
test2()
test3()
'''
test1 1.002921340001194
test2 0.791668149002362
test3 0.6878061269999307
'''
함수를 로컬변수에 저장해놓고 실행시킬 때가 가장 빠르고
그 다음이 함수를 명시적으로 import하는 경우
가장 느린 것이 모듈만 임포트 해놓고 필요할 때 불러오는 경우
파이썬에서 변수를 탐색할 때 먼저 locals() 배열에서 찾고 없으면 globals() 사전에서 찾음(test3 > test1, test2)
그리고 모듈만 임포트한 경우에는 globals() 사전에서 해당 모듈을 탐색한 이후, 다시 모듈 사전에서 해당 변수를 또 탐색해야 함(test2 > test1)
이 과정이 한두번하고 끝나면 상관 없지만 수없이 많이 실행되야하는 경우는 진지하게 고려할 필요가 ㄷㄷ
아 함수형 특징 때문에 로컬로 받으면 접근연산이 없어서 빠른건가 - return 0;
되야->돼야 (되어 = 돼임) [리듬 맞춤법 봇♬]