** * Dieser Artikel ist von Udemy "[Einführung in Python3, unterrichtet von aktiven Silicon Valley-Ingenieuren + Anwendung + Code-Stil im amerikanischen Silicon Valley-Stil](https://www.udemy.com/course/python-beginner/" Einführung in Python3, unterrichtet von aktiven Silicon Valley-Ingenieuren + Anwendung + Code-Stil im amerikanischen Silicon Valley-Stil ")" Es ist eine Klassennotiz für mich nach dem Kurs von. Es ist mit Genehmigung des Ausbilders Jun Sakai für die Öffentlichkeit zugänglich. ** **.
non_decorator
def add_num(a, b):
return a + b
print('start')
r = add_num(10, 20)
print('end')
print(r)
result
start
end
30
Zusätzlich zum Aufruf von "add_num ()" können Sie den "Dekorator" verwenden, wenn Sie vorher oder nachher etwas Zusätzliches tun möchten.
decorator
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(add_num)
r = f(10, 20)
print(r)
result
start
end
30
Für * args
siehe 52. Tupple Position Arguments
Informationen zu "** kwargs" finden Sie unter 53. Wörterbuch der Schlüsselwortargumente.
Wenn Sie es wie oben schreiben, ist es schwer zu verstehen, dass es als Dekorateur verwendet wird. Beschreiben Sie daher im Allgemeinen bei Verwendung eines Dekorateurs Folgendes.
decorator
def print_info(func):
def wrapper(*args, **kwargs):
print('start')
result = func(*args, **kwargs)
print('end')
return result
return wrapper
@print_info
def add_num(a, b):
return a + b
r = add_num(10, 20)
print(r)
result
start
end
30
Durch Angabe einer Dekorationsfunktion mit @
können Sie mit dieser Funktion dekorieren.
Schreiben Sie eine andere Dekorationsfunktion und versuchen Sie, beide zu verwenden.
two_decorators
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, 20)
print(r)
result
start
func: add_num
args: (10, 20)
kwargs: {}
result: 30
end
30
Wenn Sie einen Dekorateur wie diesen angeben,
Sie können sehen, dass print_more
in print_info
enthalten ist.
Versuchen Sie nun, die Reihenfolge der beiden Dekorateure zu vertauschen.
two_decorators
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_more
@print_info
def add_num(a, b):
return a + b
r = add_num(10, 20)
print(r)
result
func: add_num
args: (10, 20)
kwargs: {}
start
end
result: 30
30
Dieses Mal ist print_info
in print_more
enthalten.
Recommended Posts