Python 중급: Python 데코레이터 사용 방법.

파이썬 데코레이터



Python에는 기존 프로그램에 기능을 추가할 수 있는 데코레이터라는 흥미로운 기능이 있습니다. 이것은 프로그램의 일부가 컴파일 프로세스 중에 프로그램의 다른 부분을 변경하려고 시도하기 때문에 메타프로그래밍이라고도 합니다. 데코레이터 학습 요구 사항: 데코레이터를 이해하려면 먼저 몇 가지 기본 사항Python concepts을 파악해야 합니다.

우리는 Python의 모든 것이 객체라는 현실에 익숙해져야 합니다(예, 클래스 포함). 우리가 이러한 것들에 제공하는 이름은 단지 식별자일 뿐입니다. 함수는 예외가 아닙니다. 그들은 또한 objects(속성 포함)입니다. 동일한 함수 개체에 다른 이름을 할당할 수 있습니다.

예시:

def function(value):
   print(value)

function("Enablegeek")

second = function
second("Enablegeek")


산출:

Enablegeek
Enablegeek



첫 번째와 두 번째 함수의 출력은 코드가 실행될 때 동일합니다. 이 경우 첫 번째와 두 번째 이름은 유사한 함수 개체에 해당합니다. 이제 상황이 이상해지기 시작했습니다. Functions을 다른 함수에 매개변수로 제공할 수 있습니다. map, filter, reduce와 같은 Python 함수를 사용해 본 적이 있다면 이미 알고 있을 것입니다. 고차 함수는 다른 함수를 매개변수로 받아들이는 함수입니다. 다음은 이와 같은 함수의 예입니다.

예시:

def Additive(item):
   return item + 10


def Substructive(item):
   return item - 10


def Operator(func, x):
   result = func(x)
   return result

print(Operator(Additive, 100))
print(Operator(Substructive, 100))



산출:

110
90



Decorators으로 돌아가서, 호출 가능 함수 및 메소드는 호출할 수 있는 것입니다. Callable은 특별한 call() 함수를 구현하는 모든 객체를 가리킵니다. 가장 기본적인 의미에서 데코레이터는 다른 콜러블을 반환하는 콜러블입니다. 데코레이터는 기본적으로 함수를 가져와 일부 기능을 추가하고 반환합니다.

예시:

def Decorated_Function(func):
   def Internal():
       print("Decorated methods here!")
       func()
   return Internal


def Simple_Function():
   print("Ordinary methods here!")


Simple_Function()

Well_Decorated = Decorated_Function(Simple_Function)
Well_Decorated()



산출:

Ordinary methods here!
Decorated methods here!
Ordinary methods here!



Simple_Fuction() 함수가 장식되었고 결과 함수의 이름은 Well_Decorated()로 지정되었습니다.

보시다시피 데코레이터 기능은 원래 기능에 몇 가지 추가 기능을 제공했습니다. 이것은 선물을 포장하는 것과 유사합니다. 데코레이터는 컨테이너 역할을 합니다. 장식된 물체(내부에 있는 실제 존재)의 본질은 변하지 않습니다. 그러나 이제는 매력적으로 보입니다.

일반적으로 우리는 함수를 장식하고 이름을 바꿉니다.

예시:

def Decorated_Function(func):
   def Internal():
       print("Decorated methods here!")
       func()
   return Internal


@Decorated_Function
def Simple_Function():
   print("Ordinary methods here!")

Simple_Function()


산출:

Decorated methods here!
Ordinary methods here!



파이썬 데코레이터 체이닝



Python은 여러 데코레이터를 연결할 수 있습니다. 이는 함수가 다양한(또는 동일한) 데코레이터로 여러 번 장식될 수 있음을 의미합니다. 데코레이터는 단순히 필요한 기능 위에 배치됩니다.

예시:

def initialize(func):
   def internal(*args, **kwargs):
       print("$" * 30)
       func(*args, **kwargs)
       print("$" * 30)
   return internal


def hash_wise(func):
   def internal(*args, **kwargs):
       print("#" * 30)
       func(*args, **kwargs)
       print("#" * 30)
   return internal


@initialize
@hash_wise
def printer(msg):
   print(msg)


printer("Enablegeek is Awesome!")



산출:

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
##############################
Enablegeek is Awesome!
##############################
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$



이것은 긴 여정이었습니다! 함수, 특히 함수가 다른 함수 내에서 정의되고 다른 Python 개체처럼 전달되는 방법에 대해 자세히 알아보는 것으로 이 세션을 시작했습니다. 그런 다음 데코레이터와 작성 방법을 발견했습니다.

자습서here도 찾을 수 있습니다.

좋은 웹페이지 즐겨찾기