Heim  >  Artikel  >  Backend-Entwicklung  >  Python-Dekorateur

Python-Dekorateur

大家讲道理
大家讲道理Original
2017-08-19 14:47:352148Durchsuche

Ich habe schon früher etwas über Dekoratoren gelernt, aber ich habe nur an der Oberfläche gekratzt und war verwirrt, wie ich sie nennen sollte. Ich wollte nur mein aktuelles Projekt optimieren, also dachte ich darüber nach, Dekoratoren zu verwenden, also habe ich sie eingehend studiert.

Werfen wir zunächst einen Blick auf den Code:


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函数....


Meine Zweifel sind, dass die Rückgabe offensichtlich eine ist Funktionsname, was Sinn macht. Mit anderen Worten, was zurückgegeben wird, ist eine Funktionsadresse! Stimmt etwas mit meinem Verständnis nicht? Dann habe ich die Informationen im Internet überprüft und es war wieder geschlossen.... Aber ich persönlich habe es selbst analysiert und ein Programm zusammengefasst Programm:


# 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()())  # 调用无参数的嵌套函数...


Ist das nicht ähnlich wie bei unserem Dekorateur? Das ist unser Dekorateur! Daher können wir es gemäß dem obigen Programm verstehen, was bedeutet, dass es zuerst die Anzahl der Parameter bestimmt und diese dann separat übergibt. Als nächstes schreiben wir den Code neu:


# coding=utf-8import 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__':
    timeif(foo)(' Hello')


Das obige ist der detaillierte Inhalt vonPython-Dekorateur. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn