파이썬 데코레이터 예제

그러나 파이썬은 데코레이터를 적용하는 훨씬 쉬운 방법을 제공합니다. 우리는 단순히 우리가 장식하고자하는 함수 전에 @ 기호를 사용합니다. 아래에서 실제로 보여 드리겠습니다. 파이썬의 데코레이터 구문을 사용하면 훨씬 더 표현력이 있는 동일한 것을 얻을 수 있습니다. 예제 주셔서 감사합니다. 다른 파이썬 문서의 많은 달리, 나는 온라인 파이썬 documation에서 명확한 설명을 찾을 수 없습니다. 그래서, 다시, 감사합니다. 당신은 여전히 더 찾고 있다면, 우리의 책 파이썬 트릭은 데이비드 비즐리와 브라이언 K. 존스에 의해 파이썬 요리 책처럼, 장식에 섹션이 있습니다. 여기서는 두 개의 인수와 @decorator_func say_hello 함수를 정의했습니다. decorator_func 즉 wrapper_func의 내부 함수는 say_hello 함수와 정확히 동일한 수의 인수를 취해야 합니다. 이 클래스를 사용하면 데코레이터의 효과를 볼 수 있습니다.

데코레이터를 정의하고 다음과 같이 사용할 수 있습니다: 하루가 끝나면 래퍼 함수가 원래 함수의 이름, 모듈 및 문서 문자열을 수행하지 않기 때문에 문제가 될 수 있는 디버깅의 경우 데코레이터가 함수를 래핑합니다. 위의 예에 따라: 여기서 주목해야 할 한 가지 중요한 점은 데코레이터를 설정하는 순서가 중요하다는 것입니다. 위의 예제에서 순서가 다른 경우 출력이 달라졌을 것입니다. 참고: 함수의 런타임에 대한 아이디어를 얻으려면 @timer 데코레이터가 좋습니다. 코드를 보다 정밀하게 측정하려면 표준 라이브러리의 timeit 모듈을 고려해야 합니다. 일시적으로 가비지 수집을 비활성화하고 빠른 함수 호출에서 노이즈를 제거하기 위해 여러 시험을 실행합니다. 이 @CountCalls 데코레이터는 이전 섹션의 데코레이터와 동일하게 작동합니다. 이제 프로덕션 환경에서 로그 데코레이터가 있지만 응용 프로그램의 일부가 중요한 것으로 간주되면 실패가 더 즉각적인 주의가 필요한 것일 수 있습니다. 파일에 로그만 로그하면 되는 경우도 있습니다. 다른 경우 는 전자 메일을 보내려면 문제가 주의를 끌고 자신의 레코드에 대한 로그를 유지합니다. 상속을 사용하는 경우이지만 지금까지 데코레이터를 빌드하는 데 사용되는 함수만 보았습니다.

파이썬 데코레이터의 힘 : 고급 패턴 및 기술 (PDF 가이드) 이 다음 예제는 매우 유용하지 않을 수 있습니다. 파이썬 코드를 느리게하려는 이유는 무엇입니까? 가장 일반적인 사용 사례는 웹 페이지와 같은 리소스가 변경되었는지 여부를 지속적으로 확인하는 함수의 속도를 제한하려는 것입니다. @slow_down 데코레이터는 장식 된 함수를 호출하기 전에 1 초 동안 잠을 잘 것입니다 : 우리가 기대했던 것과는 다릅니다! 그 이름은 “a_function_요구_장식”입니다. 그럼 우리의 기능은 wrapTheFunction로 대체되었습니다. 그것은 우리의 함수의 이름과 문서 문자열을 덮어. 다행히 파이썬은 우리에게이 문제를 해결하기 위한 간단한 기능을 제공하며 functools.wraps입니다. functools.wraps를 사용 하 여 우리의 이전 예제를 수정 해 봅시다: @slow_down 데코레이터의 효과 볼 @debug 수 있습니다.