Décorateur 2

2 décorateurs 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)

Résultat d'exécution de deux décorateurs 1


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

Si vous modifiez l'ordre de @print_info et @print_more Le résultat de l'exécution est

Résultat d'exécution lors du remplacement


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

Devient

c'est, Comme ci-dessous Cela peut être un peu plus facile à comprendre si vous l'écrivez sans utiliser @. .. ..

2 décorateurs 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)

Résultat d'exécution de deux décorateurs 2


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

Une image qui enveloppe print_more dans print_info. .. ..

Recommended Posts

Décorateur 1
Décorateur 2
Décorateur
Décorateur
Décorateur MyHDL
Le décorateur doit réessayer
Modèle de conception #Decorator
Décorateur de fonction Python
Écrire un décorateur en classe
Faire un décorateur de fonction
Résumez le décorateur @property de Python
notes d'utilisation du décorateur python
Utilisez Property Decorator?
Mémo d'opération de décorateur Python
J'ai essayé Python> décorateur
Décorer avec un décorateur