먼저, 소요 시간을 측정하는 프로그램을 살펴보겠습니다. 다음은 이전 솔루션의 예입니다.
from functools import wraps, partial from time import time def timing(func=None, frequencies=1): if func is None: # print("+None") return partial(timing, frequencies=frequencies) # else: # print("-None") @wraps(func) def _wrapper(*args, **kwargs): start_time = time() for t in range(frequencies): result = func(*args, **kwargs) end_time = time() print('运行花费时间:{:.6f}s。'.format(end_time-start_time)) return result return _wrapper @timing def run(): l = [] for i in range(5000000): l.extend([i]) return len(l)
은 다음과 같이 실행됩니다.
In [4]: run() 运行花费时间:2.383398s。 Out[4]: 5000000
(더 깊게 문의하고 싶으시면 댓글을 삭제하시고 어떤 결과물이 나올지 생각해보시면 됩니다.)
오늘 우연히 Python의 컨텍스트 관리자(Context Manager
)를 보았는데, 정말 좋은 것 같았습니다. 사실 with
문과 밀접한 관련이 있는데, 이전에는 전혀 눈치채지 못했습니다.
from time import time def run2(): l = [] for i in range(5000000): l.extend([i]) return len(l) class ElapsedTime(): def __enter__(self): self.start_time = time() return self def __exit__(self, exception_type, exception_value, traceback): self.end_time = time() print('运行花费时间:{:.6f}s。'.format(self.end_time - self.start_time)) with ElapsedTime(): run2()
요약
공식 문서를 간략하게 살펴본 후에도 컨텍스트 관리는 여전히 약간 복잡합니다. 파이썬은 오늘날까지 발전했고, 사실 더 이상 단순하지 않습니다. 간단히 말하면, 시대에 뒤처지지 않고, 가지고 있는 것은 구식 삼도끼뿐이라는 것입니다. 그러므로 여러분의 사각지대를 보완하기 위해 지식은 지속적으로 업데이트되어야 합니다. 위의 내용은 모든 사람의 공부나 업무에 도움이 되기를 바랍니다.