>  기사  >  백엔드 개발  >  파이썬 데코레이터

파이썬 데코레이터

大家讲道理
大家讲道理원래의
2017-08-19 14:47:352147검색

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

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


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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.