Décorateur (décorateurs) est une partie importante de Python. Autrement dit: ils sont modifiés capacités fonctionnelles d'autres fonctions. Ils contribuent à rendre notre code plus court et plus Pythonic.
Écrivons une fonction simple, comme la recherche d'un nombre premier.
def is_prime(num):
if num < 2:
return False
elif num == 2:
return True
else:
for i in range(2,num):
if num%i == 0:
return False
return True
Maintenant, nous allons écrire une fonction qui génère des nombres premiers
def prime_nums():
for i in range(2,10000):
if is_prime(i):
print(i)
Is_prime en appelant la fonction, déterminé nombre premier entre 2 et 10 000.
Si nous voulons compter le temps nécessaire à cette fonction, nous devons utiliser le temps de calcul module de temps.
def prime_nums(maxnum):
start = time.time()
for i in range(2,maxnum):
if is_prime(i):
print(i)
end = time.time()
result = end-start
print(result)
Afin que nous puissions connaître la fin de cette fonction de base de la façon dont long terme,
si nous avons beaucoup de besoin pour une telle fonction pour calculer le temps d' exécution, nous ne pouvons pas avoir chacun une fonction comme celui - ci pour écrire à nouveau time.time (), puis décorateurs de python sur il a joué un rôle très pratique.
On calcule le temps d'écrire un décorateur
def display_time(func):
def wapper():
t1 = time.time()
func()
t2 = time.time()
print(t2 - t1)
return wapper
func DISPLAY_TIME paramètres de la fonction que nous avons besoin d'utiliser une fonction de décorateur, qui est la fonction func comme paramètre passé à la DISPLAY_TIME cette fonction.
Ensuite , appelez cette fonction passée dans Wapper cette fonction.
@display_time
def prime_nums():
for i in range(2,10000):
if is_prime(i):
print(i)
Plus @ décorateur sur la fonction nécessite l'utilisation d'un décorateur, vous pouvez utiliser la fonction décorateur.
Nous courons une fois de plus
vous pouvez voir essentiellement la même efficacité, notre fonction de calcul est également atteint.
Si nous voulons déterminer la fonction du nombre de nombres premiers nombres premiers, et retourne une valeur, décorateur comment modifier.
@display_time
def prime_nums():
count = 0
for i in range(2,10000):
if is_prime(i):
print(i)
count += 1
return count
Parce que la fonction de retour, le décorateur avec une variable doit recevoir la page.
def display_time(func):
def wapper():
t1 = time.time()
result = func()
t2 = time.time()
print(t2 - t1)
return result
return wapper
Si la fonction a besoin de passer des paramètres, il
@display_time
def prime_nums(maxnum):
count = 0
for i in range(2,maxnum):
if is_prime(i):
print(i)
count += 1
return count
Nous pouvons utiliser les * args fonction de réception.
def display_time(func):
def wapper(*args):
t1 = time.time()
result = func(*args)
t2 = time.time()
print(t2 - t1)
return result
return wapper
Enfin, appelez la fonction, conformément aux résultats obtenus avec nos besoins.