[PYTHON] Dekorateur 2

2 Dekorateure 1


def print_more(func):
    def wrapper(*args, **kwargs):
        print('func:', func.__name__)
        print('args:', args)
        print('kwargs:', kwargs)
        result = func(*args, **kwargs)
        print('result:', result)
        return result
    return wrapper

def print_info(func):
    def wrapper(*args, **kwargs):
        print('start')
        result = func(*args, **kwargs)
        print('end')
        return result
    return wrapper

@print_info
@print_more
def add_num(a, b):
    return a + b
    
r = add_num(10, 40)
print(r)

Ausführungsergebnis zweier Dekorateure 1


start
func: add_num
args: (10, 20)
kwargs: {}
result: 30
end
30

Wenn Sie die Reihenfolge von @print_info und @print_more ändern Das Ausführungsergebnis ist

Ausführungsergebnis beim Ersetzen


func: wrapper
args: (10, 40)
kwargs: {}
start
end
result: 50
50

Wird

das ist, Wie nachstehend Es ist möglicherweise etwas einfacher zu verstehen, wenn Sie es ohne @ schreiben. .. ..

2 Dekorateure 2


def print_more(func):
    def wrapper(*args, **kwargs):
        print('func:', func.__name__)
        print('args:', args)
        print('kwargs:', kwargs)
        result = func(*args, **kwargs)
        print('result:', result)
        return result
    return wrapper

def print_info(func):
    def wrapper(*args, **kwargs):
        print('start')
        result = func(*args, **kwargs)
        print('end')
        return result
    return wrapper

def add_num(a, b):
    return a + b

f = print_info(print_more(add_num))
r = f(10, 40)
print(r)

Ausführungsergebnis zweier Dekorateure 2


start
func: add_num
args: (10, 20)
kwargs: {}
result: 30
end
30

Ein Bild, das print_more in print_info einschließt. .. ..

Recommended Posts

Dekorateur 1
Dekorateur 2
Dekorateur
Dekorateur
MyHDL Dekorateur
Dekorateur zu versuchen
Entwurfsmuster #Decorator
Python-Funktionsdekorateur
Schreiben Sie Dekorateur in der Klasse
Machen Sie einen Funktionsdekorateur
Fassen Sie Pythons @property Decorator zusammen
Verwendungshinweise für Python Decorator
Property Decorator verwenden?
Python-Dekorator-Operationsnotiz
Ich habe Python> Decorator ausprobiert
Mit Dekorateur dekorieren