0
나는 파이썬 데코레이터를 읽고 매우 유용하다는 것을 알았지 만, 나는 구글과 stackoverflow에서 검색하려고했지만 좋은 대답을 찾을 수 없다는 혼란을 겪고있다. 하나의 질문은 이미 stackoverflow에서 같은 제목으로 질문을 받는다. @wrap 내 질문은 다릅니다왜 우리는 래퍼를 사용하지 않고 데코레이터를 만들 수있을 때 데코레이터에서 래퍼를 사용합니까?
그래서 무엇 기본적인 장식 템플릿은 다음과 같습니다 결과
def deco(x):
def wrapper(xx):
print("before the deco")
x(xx)
print("after the deco")
return wrapper
def new_func(a):
print("this is new function")
wow=deco(new_func)
print(wow(12))
:
before the deco
this is new function
after the deco
None
그래서 때마다 데코는 WRA 전화를 반환 pper 함수, 이제 내가 얻지 못하는 이유는 우리의 주된 목표가 new_func을 매개 변수로 deco 함수에 전달하고 deco 함수에서 해당 매개 변수를 호출 할 때 래퍼를 사용하는 이유입니다. 그러면 래퍼 함수없이 동일한 것을 만들 수 있습니다. :
결과
def deco(x):
print("before the deco")
a=1
x(a)
print("after the deco")
def new_func(r):
print("this is new function")
wow=deco(new_func)
print(wow)
:
before the deco
this is new function
after the deco
None
그래서 장식에 래퍼의 사용은 무엇인가?
'print (와우 (12))'와'print (wow)'의 차이점이 있습니다 ... 두 번째 경우에는 함수를 다시 얻지 못합니다. –
차이가 있습니다. 첫 번째 방법은 함수를 반환하고 두 번째 방법은 아무것도 반환하지 않습니다. 두 번 호출 한 후에'print (type (와우))'를 추가하면 그것을 볼 수 있습니다. – PerunSS