파이썬 데코레이터

大家讲道理
풀어 주다: 2017-08-19 14:47:35
원래의
2222명이 탐색했습니다.

데코레이터에 대해 이전에 배운 적이 있지만, 겉모습만 보고 어떻게 불러야 할지 헷갈릴 뿐입니다. 그냥 현재 프로젝트를 최적화하고 싶어서 데코레이터를 사용해볼까 해서 심도 있게 공부하게 되었어요.

먼저 살펴보겠습니다. 코드:


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


@timeifdef 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 funY1if __name__ == '__main__':    # print(funX(5)())  # 调用有参数的嵌套函数...
    
    print(funX1()())  # 调用无参数的嵌套函数...
로그인 후 복사


이거 우리 데코레이터랑 비슷하지 않나요? 이것은 우리의 데코레이터입니다! 따라서 위 프로그램에 따라 이해할 수 있습니다. 즉, 먼저 매개변수 수를 결정한 다음 별도로 전달한다는 의미입니다. 다음으로 코드를 다시 작성해 보겠습니다.

위 내용은 파이썬 데코레이터의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿