파이썬의 데코레이터
깃허브나 다른 코드베이스를 살펴볼 때마다 우리는 종종 파이썬처럼 보이는 것을 보게 됩니다.
@decorator
def my_function():
pass
이것은 파이썬에서 데코레이터로 알려져 있으며 매우 편리하고 강력합니다. 데코레이터는 함수 자체를 변경하지 않고 함수의 동작을 변경해야 할 때 사용됩니다. 말이된다? 이제 됩니다.
파이썬의 거의 모든 것이 객체라고 할 수 있습니다. 함수도 객체(일급)입니다. 따라서 변수에 함수를 할당할 수 있습니다.
def my_function():
print("hello dev community")
#we can assign the function without executing to the variable func
func=my_function
함수는 일류 객체입니다.
이전에 표시된 대로 변수에 할당할 수 있습니다.
또한 다른 함수에 인수로 전달될 수 있으며 다른 함수에 중첩될 수도 있습니다.
def outer(message):
def inner():
print("hi "+ message)
return inner
hi = outer("dev community")
bye = outer("dev community")
#this executes the inner function.
hi()
bye()
산출
hi dev community
bye dev community
여기에 두 개의 중첩 함수
outer
와 inner
가 있습니다.outer
는 실행하지 않고 inner
를 반환합니다. 변수에 outer
를 할당하고 변수를 실행하면 실제로 특정 인수로 inner
가 실행됩니다.이를 클로저라고 합니다. 클로저는 전역 값의 사용을 피할 수 있고 어떤 형태의 데이터 숨김을 제공합니다. 또한 문제에 대한 객체 지향 솔루션을 제공할 수도 있습니다.
데코레이터는 클로저를 광범위하게 사용합니다.
데코레이터는
message
를 인수로 사용하는 대신 함수를 인수로 사용합니다. 데코레이터를 단계별로 만들어 보겠습니다.def decorator_function(original_function):
def wrapper_function():
#do something before the function
print("hello from wrapper")
return original_function()
return wrapper_function
def display():
print("hello from display")
decor_display = decorator_function(display)
decor_display()
코드는 이전에 생성한 클로저와 매우 유사합니다. 이제
decorated_function
를 통해 함수를 전달하고 있습니다.decor_display
를 할당하면 decorator_function
가 실행되고 wrapper_function
가 반환됩니다. 그런 다음 마지막 줄에서 wrapper_function
를 호출하여 decor_display
에 저장된 decor_display
를 실행합니다. 이제 wrapper_function
는 인쇄 문을 실행하고 컨텍스트에서 original_function
인 display
를 실행하고 최종적으로 다음을 출력합니다.hello from wrapper
hello from display
확실히 받아들여야 할 것이 많았습니다. 프로세스를 다시 살펴보고 논리가 명확해지기를 바랍니다.
여기서 우리는 성공적으로
display
함수 앞에 추가 줄을 인쇄하여 hello from wrapper
함수의 동작을 변경했습니다. display
함수 자체를 변경하지 않고 decorator_function
를 사용하여 동작을 변경했습니다.Python을 사용하면
@decorator_function_name
를 사용하여 동일한 작업을 수행할 수 있습니다. 변수에 decorator_function
를 할당하는 대신 함수 앞에 @decorator_function
를 사용하여 모든 함수에 할당할 수 있습니다.def decorator_function(original_function):
def wrapper_function():
#do something before the function
print("hello from wrapper")
return original_function()
return wrapper_function
#this works same as decorator_function(display)
@decorator_function
def display():
print("hello from display")
display()
산출
hello from wrapper
hello from display
결론
데코레이터는 강력한 도구이며 로깅, 성능 테스트, 캐싱 수행, 권한 확인 등과 같은 다양한 목적을 위해 많은 코드베이스에서 사용됩니다. 이 튜토리얼이 유용하다고 생각되면 아래에 주석을 달아주십시오. 읽어주시고 배워주셔서 감사합니다.
->
Reference
이 문제에 관하여(파이썬의 데코레이터), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/xzm27/decorators-in-python-4cmd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)