décorateur de fonction python
Comme son nom l'indique, le décorateur est utilisé pour le traitement secondaire d'une fonction. Par exemple, nous avons travaillé si dur pour écrire une fonction et maintenant nous devons ajouter de nouvelles fonctions, alors que faites-vous en ce moment? Évidemment, il ne vaut pas la peine de modifier à nouveau le code si la quantité de code est importante. En d'autres termes, il est nécessaire d'ajouter la même fonction à plusieurs fonctions Si le collage et la copie ne sont évidemment pas très efficaces, cette fois le décorateur est introduit.
Donner une châtaigne
Maintenant, nous définissons une fonction
import time
def need_change():
time.sleep(2)#让它沉睡2秒
Ensuite, nous devons maintenant ajouter une fonction de minutage pour calculer le temps d'exécution de ce programme.
Changez-le pour qu'il ressemble à ceci
import time
def need_change():
star=time.time()
time.sleep(2)#让它沉睡2秒
end=time.time()
print(end-star)
Très bien, des fonctions modifiées et ajoutées avec succès, j'ai donc encore 10 programmes de ce type qui doivent ajouter de telles fonctions.
Ecrire des fonctions décoratives
Notre but est d'obtenir une nouvelle fonction avec des fonctions ajoutées, dans ce cas, nous définissons directement une fonction et cette fonction peut renvoyer une nouvelle fonction.
def decorate(func):
def new_function():
star=time.time()
func()
end=time.time()
print(end-star)
return new_function
Vous pouvez donc voir que nous renvoyons directement une nouvelle fonction.
import time
def need_change():
time.sleep(2)#让它沉睡2秒
def decorate(func):
def new_function():
star=time.time()
func()
end=time.time()
print(end-star)
return new_function
need_change= decorate(need_change)
need_change()
Mais ce qu'il faut noter ici, c'est que la fonction need_change n'est en fait pas l'original, mais la fonction new_function.
Sinon, vous pouvez consulter ce code;
import time
def need_change():
time.sleep(2)#让它沉睡2秒
def decorate(func):
def new_function():
star=time.time()
func()
end=time.time()
print(end-star)
return new_function
print('我是这个函数%s'%need_change.__name__)
need_change= decorate(need_change)
need_change()
print('我是这个函数%s'%need_change.__name__)
L'utilisation de jelly beans
Pour plus de commodité, nous pouvons modifier le code.
import time
def decorate(func):
def new_function():
star=time.time()
func()
end=time.time()
print(end-star)
return new_function
@decorate
def need_change():
time.sleep(2)#让它沉睡2秒
need_change()
print('我是这个函数%s'%need_change.__name__)
Ce symbole @ équivaut à
need_change= decorate(need_change)
D'accord, c'est tout.