Python-Grundlagen, Dekoratoren und Übungen

coldplay.xixi
Freigeben: 2020-12-22 17:45:00
nach vorne
2648 Leute haben es durchsucht

Python-Video-TutorialDecorators erklären

Python-Grundlagen, Dekoratoren und Übungen

Kostenlos empfohlen: Python-Video-Tutorial

Decorator-Konzept

Decorator, um es auszudrücken Offen gesagt handelt es sich um eine Funktion zum Dekorieren Funktion.
Der Dekorator folgt dem Offenen und Geschlossenen Prinzip. Diese beiden Prinzipien und Konzepte finden Sie auf Baidu. 开放封闭原则依赖倒置原则,这两个原则概念,自行百度下,

装饰器长啥样

def wrapper(f): 
    def inner(*args,**kwargs):  
        ret = f(*args,**kwargs)
        return ret
    return inner
Nach dem Login kopieren

上述代码是装饰器的固定格式
调用装饰器

@wrapper  # 简称语法糖
def test():
    print(1)
test()
Nach dem Login kopieren

@wrapper是调用装饰器,相比于wrapper(test()),更节省代码,更美观。可能你看到这里就不懂了,为啥要@wrapper? 调用函数不是wrapper()
其实吧,你要我说,我也不知道,我就知道,这样写更简单。直接在要装饰的函数前@wrapper即可
以一个小例子快速看懂装饰器

def wrapper(f):
    print(2)
    def inner(*args,**kwargs):
        print(3)
        ret = f(*args,**kwargs)
        print(4)
        return ret
    return inner


@wrapper
def test():
    print(1)
test()
Nach dem Login kopieren

@wrapper == wrapper(test())   相当于调用装饰器函数,直接用语法糖@wrapper会更简便
*args是匹配以位置传参的参数,**kwargs是匹配按关键字传参的参数,这样就可以接收所有参数。
wrapper(test)接收值传给f,在内圈函数中,ret = f(*args,**kwargs)这函数是执行装饰的函数的代码。再返回执行的值,最后返回这个函数。此代码的执行结果为:

2
3
1
4
Nach dem Login kopieren

如下图所示

Python-Grundlagen, Dekoratoren und Übungen

由此可见
函数inner中,print(3)是执行装饰函数前的操作, print(4)

Wie sieht der Dekorator aus?

'''1. 默写装饰器固定格式
  2. 写一个加减功能的装饰器
'''
Nach dem Login kopieren
Der obige Code ist das feste Format des Dekorators /code>, es spart Code schöner. Wenn Sie das sehen, verstehen Sie vielleicht nicht, warum Sie @wrapper benötigen? Die aufrufende Funktion ist nicht wrapper()? Eigentlich weiß ich es nicht, wenn Sie mich bitten, es Ihnen zu sagen. Ich weiß nur, dass es einfacher ist, so zu schreiben. Setzen Sie einfach @wrapper direkt vor die Funktion, die Sie dekorieren möchten🎜Verwenden Sie ein kleines Beispiel, um den Dekorator schnell zu verstehen🎜🎜rrreee🎜@wrapper == wrapper(test ()) entspricht dem Aufruf der Decorator-Funktion. Es ist einfacher, die Syntax Sugar @wrapper direkt zu verwenden. 🎜*args stimmt mit den übergebenen Parametern überein In Position ist **kwargs ein Parameter, der mit den per Schlüsselwort übergebenen Parametern übereinstimmt, sodass alle Parameter empfangen werden können. 🎜wrapper(test) empfängt den Wert und übergibt ihn an f In der inneren Kreisfunktion ret = f(*args,**kwargs)code> this Eine Funktion ist der Code, der die dekorierte Funktion ausführt. Geben Sie dann den ausgeführten Wert und schließlich diese Funktion zurück. Das Ausführungsergebnis dieses Codes ist: 🎜rrreee🎜🎜Wie unten gezeigt🎜🎜<p class="image-package"><img src="https://img.php.cn/upload/image/723/107/%20577/1608630143622300.png" title="1608630143622300.png" alt="Python-Grundlagen, Dekoratoren und Übungen">🎜🎜🎜Man erkennt, dass in der Funktion <code>inner, print(3 ) ist die Operation vor der Ausführung der dekorierten Funktion und <code>print(4) ist die Operation nach der Ausführung der dekorierten Funktion. 🎜Es kann schwierig sein, es zu verstehen. Probieren Sie es also am besten aus. 🎜🎜🎜Grundübungen🎜🎜rrreee

Das obige ist der detaillierte Inhalt vonPython-Grundlagen, Dekoratoren und Übungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:jianshu.com
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage