Python timeit 모듈 원리 및 사용 방법

7576 단어 Pythontimeit모듈
Python의 timeit 모듈은 하나의 변수 값 문장의 실행 시간, 함수의 운행 시간 등 코드의 실행 소모 시간을 측정할 수 있습니다.
timeit 모듈은 Python 표준 라이브러리에 있는 모듈로 설치 없이 바로 가져오면 사용할 수 있습니다.가져올 때 import timeit를 직접 가져옵니다. timeit () 함수와repeat () 함수, 그리고 Timer 클래스를 사용할 수 있습니다.from timeit import 사용...Timer 클래스만 가져올 수 있습니다(전역 변수 __all__ 제한이 있음).
timeit 모듈의 원본 코드는 모두 300여 줄에 불과하는데 주로 위의 두 함수와 한 종류를 실현하는 것이다. 스스로 볼 수 있다.
다음은 timeit 모듈을 사용하여 코드의 실행 시간을 테스트하기 시작합니다. 저는 timeit 모듈을 사용하여 Python 목록이 머리에서 데이터를 추가하고 꼬리에서 데이터를 추가하는 실행 시간을 비교합니다.
1. timeit () 함수를 사용하여 실행 시간을 테스트합니다.
1. 테스트 함수 준비
먼저 두 개의 함수를 쓰세요. 한 함수는 목록 머리에서 데이터를 추가하고, 다른 함수는 목록 끝에서 데이터를 추가합니다.

#
coding = utf - 8
def insert_time_test():
  insert_list = list()
for i in range(10):
  insert_list.insert(0, i)
def append_time_test():
  append_list = list()
for i in range(10):
  append_list.append(i)
if __name__ == '__main__':
  import timeit
# coding = utf - 8
def insert_time_test():
  insert_list = list()
for i in range(10):
  insert_list.insert(0, i)
def append_time_test():
  append_list = list()
for i in range(10):
  append_list.append(i)
if __name__ == '__main__':
  import timeit
2. timeit(stmt="pass", setup="pass", timer=default_timer,number=default_number) 함수 소개
timeit () 함수는 네 개의 매개 변수가 있습니다. 매개 변수는 키워드 매개 변수이고 기본값이 있습니다.
stmt: 테스트 시간이 필요한 코드를 전송하면 코드 표현식이나 단일 변수를 직접 전송할 수도 있고 함수를 전송할 수도 있습니다.함수를 전송할 때 함수 이름 뒤에 괄호를 붙여서 함수를 실행해야 합니다. 예를 들어 stmt ='func ()'입니다.
setup: stmt에 사용되는 매개 변수, 변수, 가져올 모듈 등 stmt의 운행 환경을 전송합니다. setup ='from __main__ import func'(_main_는 현재 파일을 나타냅니다).한 줄의 문장을 쓸 수도 있고, 여러 줄의 문장을 쓸 수도 있으며, 여러 줄의 문장을 쓸 때 분호로 구분한다.
stmt 매개 변수와setup 매개 변수의 기본값은pass입니다. 값을 전달하지 않으면 테스트의 의미를 잃기 때문에 이 두 매개 변수는 필요합니다.
timer:timer 매개 변수는 현재 운영체제의 기본 시간 단위입니다. 기본값은 현재 실행 환경의 운영체제에 따라 자동으로 가져옵니다. (원본에 정의되어 있습니다.) 기본값을 유지하면 됩니다.
number: 테스트할 코드의 운행 횟수, 기본 1000000(100만) 회, 소모된 코드에 대해 너무 많이 실행하면 많은 시간이 걸리기 때문에 스스로 운행 횟수를 수정할 수 있습니다.
3. 테스트 함수의 운행 시간
현재 timeit () 를 사용하여 위의 두 함수의 운행 시간을 테스트합니다.
insert_time_timeit = timeit.timeit(stmt='insert_time_test()',
setup='from __main__ import insert_time_test')
print('insert_time_timeit: ', insert_time_timeit)
append_time_timeit = timeit.timeit(stmt='append_time_test()',
setup='from __main__ import append_time_test')
print('append_time_timeit: ', append_time_timeit)
실행 결과:
('insert_time_timeit: ', 2.9112871)
('append_time_timeit: ', 1.8884124999999998)
목록 머리에 데이터를 추가하는 시간이 목록 끝에 데이터를 추가하는 시간보다 길다는 것을 알 수 있다.
4. 테스트 코드(표현식)의 실행 시간
timeit () 를 계속 사용하여 위 코드의 운행 시간을 테스트합니다. 다만 이번에는 함수가 아니라 인자에 코드를 직접 전달합니다.
insert_time_timeit = timeit.timeit(stmt='list(insert_list.insert(0, i) for i in init_list)',
setup='insert_list=list();init_list=range(10)',
number=100000)
print('insert_time_timeit: ', insert_time_timeit)
append_time_timeit = timeit.timeit(stmt='list(append_list.append(i) for i in init_list)',
setup='append_list=list();init_list=range(10)',
number=100000)
print('append_time_timeit: ', append_time_timeit)
시간이 매우 길기 때문에, 코드에서 일부러 숫자를 백만 번에서 10만 번으로 바꾸었다.실행 결과는 다음과 같습니다.
('insert_time_timeit: ', 330.46189400000003)
('append_time_timeit: ', 0.21436310000001413)
상대적으로 같은 조작에 대해 함수를 사용하는 운행 시간은 코드 표현식에 직접 전송되는 시간보다 훨씬 적고 머리에 데이터를 삽입하는 것이 특히 뚜렷하다.
2. Repeat () 함수를 사용하여 실행 시간을 테스트합니다.
1. repeat(stmt="pass", setup="pass", timer=default_timer, repeat=default_repeat,number=default_number) 함수 소개
repeat () 함수는 다섯 개의 매개 변수가 있습니다. 매개 변수는 키워드 매개 변수이고 기본값이 있습니다.timeit () 함수에 비해timeit () 함수는 매개 변수repeat () 함수가 있고, 그 외에repeat () 함수는repeat 매개 변수가 하나 더 있습니다.
repeat: 테스트를 몇 번 반복해야 한다는 뜻입니다. 같은 매개 변수의timeit () 함수를 반복해서 실행하는 것으로 이해할 수 있습니다.최종 결과는 목록을 구성하여 되돌려줍니다. 리셋은 기본적으로 세 번입니다.
2. 테스트 함수의 실행 시간
현재 Repeat () 를 사용하여 위의 두 함수의 운행 시간을 테스트합니다.
insert_time_repeat = timeit.repeat(stmt='insert_time_test()',
setup='from __main__ import insert_time_test')
print('insert_time_repeat: ', insert_time_repeat)
append_time_repeat = timeit.repeat(stmt='append_time_test()',
setup='from __main__ import append_time_test')
print('append_time_repeat: ', append_time_repeat)
실행 결과는 다음과 같습니다.
('insert_time_repeat: ', [2.7707739, 2.908885, 2.7164823999999994])
('append_time_repeat: ', [1.7458063, 1.777368000000001, 1.8675014999999995])
3. 테스트 코드(표현식)의 실행 시간
repeat()를 계속 사용하여 위 코드의 운행 시간을 테스트하고 코드를 직접 전송합니다. 위에서number를 10만 번으로 바꾼 후에도 시간이 길기 때문에(300여 초) 계속 줄여서 만 번으로 바꿉니다.
insert_time_repeat = timeit.repeat(stmt='list(insert_list.insert(0, i) for i in init_list)',
setup='insert_list=list();init_list=range(10)',
repeat=5,
number=10000)
print('insert_time_repeat: ', insert_time_repeat)
append_time_repeat = timeit.repeat(stmt='list(append_list.append(i) for i in init_list)',
setup='append_list=list();init_list=range(10)',
repeat=5,
number=10000)
print('append_time_repeat: ', append_time_repeat)
실행 결과는 다음과 같습니다.
('insert_time_repeat: ', [2.591015, 2.5814996999999997, 2.5547322, 2.6153070000000005, 2.5496864000000006])
('append_time_repeat: ', [0.0181692999999985, 0.01746889999999901, 0.018901899999999472, 0.018737400000000903, 0.018211900000000725])
3. Timer 클래스 테스트 실행 시간 사용
1. Timer 클래스 소개
위에서 timeit () 함수와repeat () 함수를 사용했는데 사실 timeit 모듈에서 이 두 함수는 모두 Timer 클래스에 대해 진일보한 봉인을 했고 실제로 호출된 것은 Timer 클래스의 방법이다.
Timer 클래스에서 두 가지 방법, timeit () 방법과repeat () 방법을 실현했는데 위의 두 함수가 호출된 것이 바로 이 두 가지 방법이다.
from timeit import를 사용하고 있는데...타이머 클래스만 가져올 수 있기 때문에 타이머 클래스를 직접 사용해서 테스트할 수 있고 스스로 방법을 호출할 수 있어 더욱 유연하게 사용할 수 있다.
2. 테스트 목록 헤드 추가
먼저 Timer 클래스의 대상을 실례화하고, 실례화할 때 stmt와setup 매개 변수 (매개 변수의 의미는 위와 일치), timer 매개 변수는 기본값을 유지하고, 실례 대상을 통해 대응하는timeit () 방법 또는repeat () 방법을 호출하고, timeit () 방법에number를 호출하고, Repeat () 방법에number와repeat를 호출합니다.
timeit () 방법과repeat () 방법으로 머리에서 데이터를 추가하는 운행 시간을 테스트합니다.
timer_insert = timeit.Timer(stmt='insert_time_test()', setup='from __main__ import insert_time_test')
insert_time_timeit = timer_insert.timeit(number=1000000)
print('insert_time_timeit: ', insert_time_timeit)
insert_time_repeat = timer_insert.repeat(number=1000000)
print('insert_time_repeat: ', insert_time_repeat)
실행 결과는 다음과 같습니다.
('insert_time_timeit: ', 2.7732486)
('insert_time_repeat: ', [2.7367806999999997, 2.707402600000001, 2.7288245999999994])
3. 테스트 목록 끝부분 추가
timeit () 방법과repeat () 방법으로 꼬리에서 데이터를 추가하는 운행 시간을 테스트합니다.
timer_append = timeit.Timer(stmt='append_time_test()', setup='from __main__ import append_time_test')
append_time_timeit = timer_append.timeit(number=1000000)
print('append_time_timeit: ', append_time_timeit)
append_time_repeat = timer_append.repeat(number=1000000)
print('append_time_repeat: ', append_time_repeat)
실행 결과는 다음과 같습니다.
('append_time_timeit: ', 1.9966106000000001)
('append_time_repeat: ', [1.9523343999999998, 1.8373857999999998, 1.8695377000000004])
timeit 모듈은 비교적 간단한 모듈로 대략적인 사용법은 이것뿐이다.
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

좋은 웹페이지 즐겨찾기