Un décorateur revient à ajouter un comportement supplémentaire à une fonction existante. Par exemple, vous pouvez mesurer le temps d'exécution et le sortir, ou ajouter un message tel que "~ ~ fonction a été exécutée".
Cette fois, j'ai fait quelque chose pour ajouter un message à la mesure du temps de sortie et d'exécution Code créé: https://github.com/KodairaTomonori/Qiita/tree/master/default_module/syntax
decoration.py
deco = '¡+゜+¡・゜・¡+*+¡・★・¡+*+¡・===[ '
deco_end = deco.replace('[', ']')[::-1]
deco_result = [' ∧____∧ Résultats', '( `Д´ )Je sortirai', '(▄︻▇〓┳0035', '/ )', '( / ̄∪']
def deco_func(func):
def decoration(*args, **kwargs):
print(deco + 'start ' + func.__name__ + deco_end)
for i in range(len(deco_result) ):
if i != 2: print(deco_result[i])
else: print(deco_result[i], func(*args, **kwargs) )
print(deco + 'end ' + func.__name__ + deco_end)
return decoration
@deco_func
def addition(a, b):
return '{} + {} = {}'.format(a, b, a + b)
if __name__ == '__main__':
addition(103842, 283746)
Le décorateur est que la fonction deco_func renvoie la fonction décoration créée dans la fonction.
decoration imprime le début et la fin pour décorer la sortie.
Vous pouvez obtenir le nom de la fonction avec func .__ name__.
De plus, en définissant (* args, ** kwargs), il est possible de correspondre à la plupart des fonctions.
Pour l'utiliser comme décorateur, ajoutez simplement @ deco_func devant la fonction.
En faisant cela, ʻaddition=deco_func (addition) (a, b)`.
timer.py
#usr/bin/python
import time
def timer(func):
def print_time(*args, **kwargs):
start = time.time()
func(*args, **kwargs)
print(func.__name__ + \
'Le temps qu'il a fallu pour s'exécuter{}Secondes'.format(time.time() - start) )
return print_time
@timer
def roop_timer(a):
return roop(a)
def roop(a):
sum_ = 0
for i in range(a):
sum_ += i
return sum_
if __name__ == '__main__':
roop_timer(10000)
timer(roop)(10000)
output.txt
roop_Il a fallu 0 temps pour exécuter le minuteur.0008311271667480469 secondes
Il a fallu 0 temps pour exécuter roop.0008249282836914062 secondes
print_time mesure le temps et affiche le résultat.
func .__ name__ récupérera le nom de la fonction.
Si vous voulez refléter @ timer uniquement dans une partie, vous pouvez faire la même opération en réglant timer (roop) (10000).
Il est également possible de créer une fonction qui lui est dédiée, telle que roop_timer (il est plus facile de créer cela en utilisant deux ou plus).
Vous pouvez facilement ajouter d'autres fonctions à une fonction en ajoutant @ decorate_function.
Recommended Posts