detallado paso a paso decorador

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,
Aquí Insertar imagen Descripción
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
Aquí Insertar imagen Descripción
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

Aquí Insertar imagen Descripción
Por último, llamar a la función, en consonancia con los resultados obtenidos con nuestras necesidades.

Publicado 73 artículos originales · ganado elogios 47 · Vistas a 70000 +

Supongo que te gusta

Origin blog.csdn.net/weixin_43870646/article/details/104654612
Recomendado
Clasificación