궁금해서 직접 테스트한 결과를 기록합니다.
import timeit
# test 용 get 함수. 의미 없으니 분석 불필요
def get(p1, p2, p3, p4):
return p1+p3+p4 if isinstance(p4, int) else p1+p3+sum(p4)
# dict version
def set1(p1, p2, p3=44100):
sig = {0: p1, 2: get(p1, p3, 1001, [90, 9000])}
return sig.get(p2, get(p1, p3, 1001, 90))
# if else version
def set2(p1, p2, p3=44100):
if p2 == 0:
pass
elif p2 == 1:
sig = get(p1, p3, 1001, 90)
elif p2 == 2:
sig = get(p1, p3, 1001, [90, 9000])
else:
sig = get(p1, p3, 1001, 90)
return sig
# list version
def set3(p1, p2, p3=44100):
l1 = [p1, get(p1, p3, 1001, 90), get(p1, p3, 1001, [90, 9000]), get(p1, p3, 1001, 90)]
return l1[p2]
# 목록에 있는 경우
timeit.timeit("set1(10, 2)", setup="from __main__ import set1, set2, set3", number=1000)
# 0.004073153000717866
timeit.timeit("set2(10, 2)", setup="from __main__ import set1, set2, set3", number=1000)
# 0.0061055079986545024
timeit.timeit("set3(10, 2)", setup="from __main__ import set1, set2, set3", number=1000)
# 0.010439659001349355
# 목록에 없는 경우
timeit.timeit('set1(10, 4, 44100)', setup='from __main__ import set1, s2, s3', number=1000)
# 0.009762813999259379
>>> timeit.timeit('set2(10, 4, 44100)', setup='from __main__ import set1, s2, s3', number=1000)
# 0.0013289130001794547
timeit.timeit('set3(10, 4, 44100)', setup='from __main__ import set1, s2, s3', number=1000)
"""
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.7/timeit.py", line 232, in timeit
return Timer(stmt, setup, timer, globals).timeit(number)
File "/usr/lib/python3.7/timeit.py", line 176, in timeit
timing = self.inner(it, self.timer)
File "<timeit-src>", line 6, in inner
File "<stdin>", line 3, in set3
IndexError: list index out of range
"""
'IT > python' 카테고리의 다른 글
[python3] 동일 값으로만 채워진 객체 확인하기 (0) | 2023.02.17 |
---|---|
[python3] pathlib 으로 encoding 지정해서 파일 읽기 (0) | 2023.02.16 |
[python3] yaml 다루기 (2) | 2023.01.19 |
[python3] PIPE 등을 통해 stdin 으로부터 입력 받기 (0) | 2023.01.11 |
[python3] 못생긴 연속된 json 데이터 이쁘게 출력하기 cli version (0) | 2023.01.10 |