Decorador (decoradores) es una parte importante de Python. En pocas palabras: se modifican las capacidades funcionales de otras funciones. Ayudan a hacer nuestro código más corto y más Pythonic.
Vamos a escribir una función simple, como la búsqueda de un número primo.
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
Ahora vamos a escribir una función que genera números primos
def prime_nums():
for i in range(2,10000):
if is_prime(i):
print(i)
Is_prime llamando a la función, determinado número primo entre 2 y 10.000.
Si hemos de contar el tiempo que se requiere para esta función, entonces tenemos que utilizar el tiempo módulo de tiempo de cálculo.
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)
Por lo que podemos conocer el final de esta función básica de cómo largo plazo,
si tenemos mucha necesidad de tal función para calcular el tiempo de ejecución, no cada uno puede tener una función como esta para escribir de nuevo time.time (), entonces decoradores de Python en jugó un papel muy conveniente.
Calculamos el tiempo para escribir un decorador
def display_time(func):
def wapper():
t1 = time.time()
func()
t2 = time.time()
print(t2 - t1)
return wapper
func DISPLAY_TIME parámetros de la función que tenemos que utilizar una función decoradora, que es la función func como un parámetro pasado a la DISPLAY_TIME esta función.
A continuación, llamar a esta función aprobada en Wapper esta función.
@display_time
def prime_nums():
for i in range(2,10000):
if is_prime(i):
print(i)
Además @ decorador en función requiere el uso de un decorador, puede utilizar la función decoradora.
Llevamos a cabo una vez más
se puede ver básicamente la misma eficiencia, se consigue también nuestra función de cálculo.
Si queremos determinar la función de la cantidad de números primos en números primos, y devuelve un valor, decorador de cómo modificar.
@display_time
def prime_nums():
count = 0
for i in range(2,10000):
if is_prime(i):
print(i)
count += 1
return count
Debido a que la función que devuelve, el decorador con una variable necesita recibir la página.
def display_time(func):
def wapper():
t1 = time.time()
result = func()
t2 = time.time()
print(t2 - t1)
return result
return wapper
Si la función tiene que pasar parámetros se
@display_time
def prime_nums(maxnum):
count = 0
for i in range(2,maxnum):
if is_prime(i):
print(i)
count += 1
return count
Podemos utilizar los argumentos * función de recepción.
def display_time(func):
def wapper(*args):
t1 = time.time()
result = func(*args)
t2 = time.time()
print(t2 - t1)
return result
return wapper
Por último, llamar a la función, en consonancia con los resultados obtenidos con nuestras necesidades.