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