5 técnicas de optimización de código para acelerar sus programas |  de Nicholas Obert |  noviembre de 2023

Haga que su código sea más eficiente y profesional con estos métodos independientes del idioma

Foto por Shubham Dhage en desempaquetar

Primero haz que funcione y luego hazlo rápido. Este es un principio común que siguen muchos programadores profesionales. Al principio, puede escribir su código utilizando el enfoque que le parezca más intuitivo para ahorrar tiempo de desarrollo en el borrador. Una vez que tenga una implementación funcional, es posible que desee optimizarla eligiendo cuidadosamente qué técnicas de estructuras de datos funcionan mejor en su caso específico.

En este artículo, exploraremos cinco métodos independientes del idioma que puede utilizar para mejorar el tiempo de ejecución de su código. Los siguientes conceptos son genéricos y se pueden aplicar a cualquier lenguaje de programación.

Extracción invariante de bucle

Considere el siguiente código Python que compara una lista de cadenas con una expresión regular para encontrar todas las coincidencias:

import regex as re

# Get some strings as input
strings = get_strings()
# List to store all the matches
matches = []

# Iterate over the input strings
for string in strings:

# Compile the regex
rex = re.compile(r'[a-z]+')

# Check the string against the regex
matches = rex.findall(string)

# Finally, append the matches to the list
matches.extend(matches)

Los bucles aplican repetidamente un conjunto de instrucciones a una entrada variable. Teniendo esto en cuenta, ¿puedes detectar alguna operación que no cambie en el código anterior?

La declaración `rex = re.compile(r’[a-z]+’)`opera con una entrada constante: la cadena de expresiones regulares. Para cada iteración del bucle, esta declaración hace exactamente lo mismo, independientemente de la entrada del bucle. Si extrajéramos esta declaración invariante y la ejecutaramos una vez antes del ciclo, el código seguiría teniendo el mismo comportamiento general y ahorraría algunos ciclos de CPU.

import regex as re

# Get some strings as input
strings = get_strings()
# List to store all the matches
matches = []

# Compile the regex only once before the loop
rex = re.compile(r'[a-z]+')

# Iterate over the input strings
for string in strings:

# Check the string against the regex
matches = rex.findall(string)

# Finally, append the matches to the list
matches.extend(matches)