이 기사는 주로 모든 사람이 Python 데코레이터에 대한 관련 정보를 간단하고 심도 있게 배울 수 있도록 작성되었습니다. 관심 있는 친구들이 참고할 수 있습니다.
이전에 데코레이터에 대해 배운 적이 있지만, 그렇지 않습니다. 많이 알고 있는데 호출 방법이 헷갈려서 그냥 현재 프로젝트를 최적화하고 싶어서 데코레이터를 사용해볼까
보세요. 코드에서 먼저:
import time # 将函数作为参数传入到此方法.... def timeif(func): def wrapper(arg): print("in wrapper() %s" % (arg)) start = time.clock() func(arg) end = time.clock() print("used: %s %s" % (end-start, arg)) return wrapper @timeif def foo(arg): print("in foo() %s" % (arg)) if __name__ == '__main__': foo(" Hello ") # 表示执行foo函数....
내 의심은 반환이 명백하다는 것입니다. 논리적으로 말하면, 함수 이름은 함수 주소를 반환합니다! 내 이해에 문제가 있습니까? 그러다가 인터넷에서 정보를 확인해보니 또 종료가 되었어요.... 그런데 개인적으로 마음에 안 들었거든요. 그러다가 직접 분석해서 프로그램을 요약해 봤는데,
프로그램:
# coding=utf-8 # 带参数的函数 返回一个函数地址就行.... def funX(x): def funY(): return x return funY # 不带参数的函数.... def funX1(): print("调用函数funX1") def funY1(): print("调用函数funY1") return funY1 if __name__ == '__main__': # print(funX(5)()) # 调用有参数的嵌套函数... print(funX1()()) # 调用无参数的嵌套函数...
이것과 우리 데코레이터가 닮지 않나요? 이것은 우리의 데코레이터입니다! 따라서 위 프로그램에 따라 이해할 수 있습니다. 즉, 먼저 매개변수 수를 결정한 다음 별도로 전달한다는 의미입니다. 다음으로 코드를 다시 작성해 보겠습니다.
# coding=utf-8 import time # 将函数作为参数传入到此方法.... def timeif(func): def wrapper(arg): print("in wrapper() %s" % (arg)) start = time.clock() func(arg) end = time.clock() print("used: %s %s" % (end-start, arg)) return wrapper # @timeif def foo(arg): print("in foo() %s" % (arg)) if __name__ == '__main__': timeif(foo)(' Hello')
위 내용은 Python 데코레이터에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!