TECH4GEEKS-LOGO-HEADER
Oxary Magazine
$10 – $15 / Week

Use Python Timeit para cronometrar su código

En este tutorial, aprenderá a usar la función timeit del módulo timeit de Python. Aprenderá a cronometrar expresiones y funciones simples en Python.

La sincronización de su código puede ayudarlo a obtener una estimación de cuánto tiempo se ejecutará un fragmento de código y también a identificar las secciones de código que deben optimizarse.

Comenzaremos aprendiendo la sintaxis de la función timeit de Python. Y luego codificaremos ejemplos para comprender cómo usarlo para programar bloques de tiempo y funciones en su módulo de Python. Empecemos.

Cómo usar la función timeit de Python

El módulo timeit es parte de la biblioteca estándar de Python y puede importarlo:

import timeit

La sintaxis para usar la función timeit del módulo timeit es la siguiente:

timeit.timeit(stmt, setup, number)

Aquí:

  • stmt es la pieza de código cuyo tiempo de ejecución debe medirse. Puede especificarlo como una sola cadena de Python o una cadena de varias líneas, o pasar el nombre del invocable.
  • Como sugiere el nombre, la configuración se refiere a la pieza de código que solo debe ejecutarse una vez, a menudo como requisito previo para ejecutar la stmt. Por ejemplo, suponga que está calculando el tiempo de ejecución para crear una matriz NumPy. En este caso, la importación numpy es el código de configuración y la creación real es la instrucción de tiempo.
  • El número de parámetro indica el número de veces que se ejecuta la sentencia. El valor predeterminado para el número es 1 millón (1000000), pero también puede establecer este parámetro en cualquier otro valor que desee.

Ahora que hemos aprendido la sintaxis para usar la función timeit(), comencemos a codificar algunos ejemplos.

Sincronización de expresiones simples de Python

Timing-Simple-Python-Expressions

En esta sección, intentaremos medir el tiempo de ejecución de expresiones simples de Python usando timeit.

Inicie un REPL de Python y ejecute los siguientes ejemplos de código. Aquí calculamos el tiempo de ejecución de las operaciones de exponenciación y división de piso para 10,000 y 100,000 ejecuciones.

Tenga en cuenta que pasamos la declaración para que se cronometre como una cadena de Python y usamos un punto y coma para separar las diferentes expresiones en la declaración.

>>> import timeit
>>> timeit.timeit('3**4;3//4',number=10000)
0.0004020999999738706

>>> timeit.timeit('3**4;3//4',number=100000)
0.0013780000000451764

Ejecutando Python timeit desde la línea de comando

También puede usar timeit en la línea de comando. Aquí está la línea de comando equivalente a llamar a la función timeit:

$ python-m timeit -n [number] -s [setup] [stmt]
  • python -m timeit indica que estamos ejecutando timeit como módulo principal.
  • n es una opción de línea de comando que indica la cantidad de veces que se debe ejecutar el código. Esto es equivalente al argumento numérico en la llamada a la función timeit().
  • Puede usar la opción -s para establecer el código de instalación.
  Los 11 mejores accesorios inteligentes para autos a tener en cuenta

Aquí reescribimos el ejemplo anterior usando el equivalente de línea de comando:

$ python -m timeit -n 100000 '3**4;3//4'
100000 loops, best of 5: 35.8 nsec per loop

En este ejemplo, calculamos el tiempo de ejecución de la función integrada len(). La inicialización de la cadena es el código de configuración pasado usando la opción s.

$ python -m timeit -n 100000 -s "string_1 = 'coding'" 'len(string_1)'
100000 loops, best of 5: 239 nsec per loop

En el aviso de salida que obtenemos el tiempo de ejecución para mejor de 5 corre. ¿Qué significa? Cuando ejecuta timeit en la línea de comando, la opción de repetición r se establece en el valor predeterminado de 5. Esto significa que la ejecución de stmt para el número especificado de veces se repite cinco veces y se devuelve la ejecución de mejor duración.

Analizando métodos de inversión de cadenas usando timeit

Cuando trabaje con cadenas de Python, es posible que desee invertirlas. Los dos enfoques más comunes para la inversión de cadenas son:

  • Usando el corte de cuerdas
  • Usando la función invertida() y el método join()

Análisis-de-String-Reversal-Methods-Using-timeit

Cuerdas de Python inversas usando el corte de cuerdas

Veamos cómo funciona el corte de cadenas y cómo puede usarlo para invertir una cadena de Python. Uso de la sintaxis de cadenas[start:stop] devuelve una porción de la cadena que comienza en el inicio del índice y se extiende hasta el índice stop-1. Tomemos un ejemplo.

Considere la siguiente cadena ‘Python’. La cadena tiene una longitud de 6 y la lista de índices es 0, 1, 2 hasta 5.

foto-76

>>> string_1 = 'Python'

Cuando especifica los valores inicial y final, obtiene un segmento de cadena que se extiende desde el inicio hasta el final-1. Por lo tanto, cadena_1[1:4] devuelve ‘yth’.

  Cómo restablecer su tableta Kindle Fire

foto-77

>>> string_1 = 'Python'
>>> string_1[1:4]
'yth'

Cuando no especifica el valor de inicio, se usa el valor de inicio predeterminado de cero y el segmento comienza en el índice cero y se extiende hasta detenerse – 1.

foto-78

Aquí el valor de parada es 3, por lo que el segmento comienza en el índice 0 y sube hasta el índice 2.

>>> string_1[:3]
'Pyt'

Cuando no incluye el índice de parada, verá que el segmento comienza desde el índice de inicio (1) y se extiende hasta el final de la cadena.

imagen-80

>>> string_1[1:]
'ython'

Ignorar los valores de inicio y final devuelve una porción de la cadena completa.

foto-81

>>> string_1[::]
'Python'

Vamos a crear una rebanada con el valor del paso. Establezca los valores de inicio, parada y paso en 1, 5 y 2, respectivamente. Obtenemos una porción de la cadena que comienza en 1 y se extiende hasta 4 (excluyendo el punto final 5) que contiene cada segundo caracter.

imagen-82

>>> string_1[1:5:2]
'yh'

Cuando usa un paso negativo, puede obtener un corte que comience al final de la cadena. Con paso establecido en -2, string_1[5:2:-2] da la siguiente rebanada:

foto-83

>>> string_1[5:2:-2]
'nh'

Entonces, para obtener una copia invertida de la cadena, ignoramos los valores inicial y final y establecemos el paso en -1, como se muestra:

>>> string_1[::-1]
'nohtyP'

En resumen: cadena[::-1] devuelve una copia invertida de la cadena.

Inversión de cadenas mediante funciones integradas y métodos de cadena

La función invertida() incorporada de Python devolverá un iterador inverso sobre los elementos de la cadena.

>>> string_1 = 'Python'
>>> reversed(string_1)
<reversed object at 0x00BEAF70>

Entonces puede recorrer el iterador inverso usando un bucle for:

for char in reversed(string_1):
    print(char)

Y acceda a los elementos de la cadena en orden inverso.

# Output
n
o
h
t
y
P

Luego puede llamar al método join() en el iterador inverso con la sintaxis: .join(invertido(alguna cadena)).

El fragmento de código siguiente muestra algunos ejemplos en los que el separador es un guión y un espacio, respectivamente.

>>> '-'.join(reversed(string1))
'n-o-h-t-y-P'
>>> ' '.join(reversed(string1))
'n o h t y P'

Aquí, no queremos ningún separador; así que establezca el separador en una cadena vacía para obtener una copia invertida de la cadena:

>>> ''.join(reversed(string1))
'nohtyP'

El uso de ».join(reversed(some-string)) devuelve una copia invertida de la cadena.

Comparación de tiempos de ejecución usando timeit

Hasta ahora, hemos aprendido dos enfoques para invertir las cadenas de Python. Pero, ¿cuál de ellos es el más rápido? Vamos a averiguar.

En un ejemplo anterior en el que cronometramos expresiones simples de Python, no teníamos código de configuración. Aquí invertimos la cadena de Python. Mientras que la operación de inversión de cadena se ejecuta la cantidad de veces especificada por el número, el código de configuración es la inicialización de la cadena que solo se ejecutará una vez.

>>> import timeit
>>> timeit.timeit(stmt = 'string_1[::-1]', setup = "string_1 = 'Python'", number = 100000)
0.04951830000001678
>>> timeit.timeit(stmt = "''.join(reversed(string_1))", setup = "string_1 = 'Python'", number = 100000)
0.12858760000000302

Para el mismo número de ejecuciones para invertir la cadena dada, el corte de cadena El enfoque es más rápido que usar el método join() y la función reverse().

  Las 6 mejores aplicaciones de fútbol para la Copa Mundial de la FIFA 2022

Sincronizando funciones de Python usando timeit

Timing-Python-Functions-Using-timeit

En esta sección, aprendamos cómo cronometrar las funciones de Python con la función timeit. Dada una lista de cadenas, la siguiente función hasDigit devuelve la lista de cadenas que contienen al menos un dígito.

def hasDigit(somelist):
     str_with_digit = []
     for string in somelist:
         check_char = [char.isdigit() for char in string]
         if any(check_char):
            str_with_digit.append(string)
     return str_with_digit

Ahora nos gustaría medir el tiempo de ejecución de esta función hasDigit() de Python usando timeit.

Primero identifiquemos la instrucción a cronometrar (stmt). Esta es la llamada a la función hasDigit() con una lista de cadenas como argumento. A continuación, definamos el instalar codificado ¿Puedes adivinar cuál debería ser el código de instalación?

Para que la llamada a la función se ejecute correctamente, el código de instalación debe incluir lo siguiente:

  • La definición de la función hasDigit()
  • Inicializar la lista de argumentos de cadenas

Establezcamos el código de configuración en la cadena de configuración, como se muestra a continuación:

setup = """
def hasDigit(somelist):
    str_with_digit = []
    for string in somelist:
      check_char = [char.isdigit() for char in string]
      if any(check_char):
        str_with_digit.append(string)
    return str_with_digit
thislist=['puffin3','7frost','blue']
     """

Entonces podemos usar la función timeit y obtener el tiempo de ejecución de la función hasDigit() para 100,000 ejecuciones.

import timeit
timeit.timeit('hasDigit(thislist)',setup=setup,number=100000)
# Output
0.2810094920000097

Conclusión

Has aprendido a usar Función timeit de Python expresiones de tiempo, funciones y otras llamadas. Puede ayudarlo a comparar su código, comparar los tiempos de ejecución de diferentes implementaciones de la misma función, etc.

Repasemos lo que aprendimos en este tutorial. Puede utilizar la función timeit() con la sintaxis timeit.timeit(stmt=…,setup=…,number=…). Alternativamente, puede ejecutar timeit en la línea de comando para cronometrar los fragmentos cortos.

En el siguiente paso, puede explorar cómo usar otros paquetes de creación de perfiles de Python como perfilador de línea y perfilador para perfilar su código por tiempo y memoria, respectivamente.

A continuación, aprenda a calcular la diferencia horaria en Python.

Fuente

Etiquetas

Comparte en:

Ultimos Post

Categorias

Lorem ipsum dolor sit amet, consectetur adipiscing elit eiusmod tempor ncididunt ut labore et dolore magna
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore