이번에는 성능 테스트를 해보려고 한다.
에러를 발생을 시켜 catch부분에서 처리를 하는 방식과, 조건분기, 내장 모듈 사용이 얼마나 걸리는지 테스트를 하려고 한다.
똑같은 값이 얼마나 있는지 카운팅을 해주는 함수이다.
1
2
3
4
5
6
7
8
9
|
import time
def time_check(func):
def new_func():
start = time.time()
func()
result = time.time() - start
print(result)
return new_func
| cs |
우선 데코레이터로 만들어질 시간 체크 부분이다.
1
2
3
4
5
6
7
8
9
10
|
#키가 있는지 없는지 검사 후 카운팅
@time_check
def frequency_test1():
Dictionary=dict()
for i in range(10000):
if i in Dictionary.keys():
Dictionary[i]+=1
else:
Dictionary[i]=1
return Dictionary
| cs |
1
2
3
4
5
6
7
8
9
10
|
#에러 발생후 카운팅
@time_check
def frequency_test2():
Dictionary=dict()
for i in range(10000):
try:
Dictionary[i]+=1
except KeyError:
Dictionary[i]=1
return Dictionary
| cs |
1
2
3
4
5
6
7
8
|
#내장모듈 사용
@time_check
def frequency_test3():
Dictionary = dict()
for i in range(10000):
Dictionary.setdefault(i, 1)
Dictionary[i] += 1
return Dictionary
| cs |
인자를 안넘기고 내부적으로 range를 통해서 테스트를 진행을 하고있다.
p.py
1
2
3
|
frequency_test1()
frequency_test2()
frequency_test3()
| cs |
$python p.py
0.002000093460083008
0.005000114440917969
0.002000093460083008
첫번째 방식에서는 Dictionary에서 지원을 해주는 keys라는 함수를 사용하여 확인을한다.
두번째로는 직접 해당키에 접근을 하여 += 1를 해준다 이때 해당 키가 존재하지 않는다면 에러를 발생을 시켜 except처리에서 =1을 해준다.
세번째 방식에서는 dictionary에서 지원해주는 setdefault를 이용을한다.
setdefault는 첫번째 인자로는 키값이 들어간다. 해당 키가 없으면 두번째 인자로 key-value를 생성을 한다.
1
2
3
4
5
6
7
8
9
10
11
12
|
f1=[]
f2=[]
f3=[]
for i in range(500):
f1.append(frequency_test1())
f2.append(frequency_test2())
f3.append(frequency_test3())
print(np.mean(f1))
print(np.mean(f2))
print(np.mean(f3))
| cs |
$python p.py
0.00164210510254
0.0032741765976
0.00217812395096
댓글
댓글 쓰기