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