Python 함수 실행 전후에 추가 동작을 추가하는 방법

WBOY
풀어 주다: 2016-12-05 13:27:16
원래의
1436명이 탐색했습니다.

먼저, 소요 시간을 측정하는 프로그램을 살펴보겠습니다. 다음은 이전 솔루션의 예입니다.

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()
로그인 후 복사

요약

공식 문서를 간략하게 살펴본 후에도 컨텍스트 관리는 여전히 약간 복잡합니다. 파이썬은 오늘날까지 발전했고, 사실 더 이상 단순하지 않습니다. 간단히 말하면, 시대에 뒤처지지 않고, 가지고 있는 것은 구식 삼도끼뿐이라는 것입니다. 그러므로 여러분의 사각지대를 보완하기 위해 지식은 지속적으로 업데이트되어야 합니다. 위의 내용은 모든 사람의 공부나 업무에 도움이 되기를 바랍니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿