Python …Todos conocemos la popularidad de este lenguaje. Python es un poderoso lenguaje de programación de orden superior. En el mundo tecnológico actual, está en casi todas partes. Ya sea que esté creando una aplicación web o trabajando con aprendizaje automático, este lenguaje se ha convertido en la primera opción para los desarrolladores. Cuando se trata de optimizar la productividad de los desarrolladores, Python es lo primero. Puede crear un programa al instante y resolver los problemas comerciales de su cliente.
Escribir una solución en Python no garantiza que esté optimizada y mejora el rendimiento de Python. Sin embargo, mientras escribe su código en Python, puede seguir algunas estrategias para ayudarlo a mejorar el rendimiento de su aplicación. Estas estrategias pueden hacer que su aplicación sea más rápida.
Algunos consejos o estrategias tendrán un gran impacto en la ejecución y otros tendrán efectos más pequeños y sutiles. Analicemos esos consejos en detalle…
1. Usar funciones integradas
La función incorporada en cualquier idioma siempre es útil porque no necesita escribir su código desde cero. Lo mismo ocurre con Python. Python viene con muchas bibliotecas útiles y funciones integradas. Estas bibliotecas son útiles para escribir las características en varios lugares de su proyecto de desarrollo. Puede escribir código eficiente y de alta calidad, pero es difícil vencer a las bibliotecas subyacentes.
Las bibliotecas de Python están optimizadas y probadas rigurosamente (como su código). Estas funciones integradas son fáciles de usar en su proyecto. No tendrá código redundante en su proyecto y el código se optimizará muy bien.
2. Escriba su propio generador
En Python usa generador siempre que sea posible. Le permite devolver un solo artículo a la vez en lugar de devolver todos los artículos a la vez. La función Xrange() es un generador en Python 2, similar a la función range() en Python 3.
Si está utilizando listas, debe escribir su propio generador. Los generadores le brindan una evaluación perezosa y la memoria se utilizará de manera eficiente. Los generadores son muy útiles si está leyendo numerosos archivos grandes. Puede procesar un solo fragmento sin preocuparse por el tamaño de los archivos.
A continuación se muestra un ejemplo para su ayuda…
import requests import re def get_pages(link): pages_to_visit = [] pages_to_visit.append(link) pattern = re.compile('https?') while pages_to_visit: current_page = pages_to_visit.pop(0) page = requests.get(current_page) for url in re.findall('<a href="([^"]+)">', str(page.content)): if url[0] == '/': url = current_page + url[1:] if pattern.match(url): pages_to_visit.append(url) yield current_page webpage = get_pages('http://www.example.com') for result in webpage: print(result)
El ejemplo anterior devuelve una página a la vez que realiza una acción de algún tipo. En el caso anterior, estamos imprimiendo el enlace. Sin un generador, debe obtener y procesar los datos al mismo tiempo o recopilar todos los enlaces antes de comenzar a procesar. En este caso, su código será más limpio, más rápido y más fácil de probar.
3. Usa listas de comprensión
Al igual que en cualquier otro idioma, el uso de bucles es común en Python. Es posible que haya utilizado listas de comprensión en Python. La comprensión de listas es una excelente manera de ejecutar su código más rápido. Las comprensiones de listas son concisas y crear una nueva lista es más fácil ya que acelera el proceso. Suponga que desea encontrar el cuadrado de todos los números impares en un rango específico. Puede resolver este problema usando el bucle como se indica a continuación…
square_numbers = [] for n in range(0,10): if n % 2 == 1: square_numbers.append(n**2)
Puedes resolver el mismo problema, usando la lista de comprensión en una sola línea…
square_numbers = [n**2 for n in range(1,10) if n%2 == 1]
Puede ver que el segundo enfoque es más optimizado y legible. Obtendrá los resultados más rápidos después de ejecutar este código. Todos estos consejos en bases de código pequeñas tienen rangos pequeños. Este enfoque no hará mucha diferencia, pero en otras situaciones, puede hacer toda la diferencia cuando intente ahorrar algo de tiempo. Su programa se ejecutará más rápido.
4. Use xrange() en lugar de range()
En Python 2, para iterar sobre bucles podemos usar las funciones range() y xrange(). La primera función almacena todos los números en el rango en la memoria, y se volvió linealmente grande como lo hizo el rango. Otra función xrange() devuelve el objeto generador. Si realiza un bucle con estos números de objeto, estarán disponibles en la memoria solo bajo demanda.
import sys counter = range(1, 70000) print(sys.getsizeof(counter))
El código anterior devuelve 560064. Si usa xrange con el mismo rango, devolverá 40. Si está escribiendo su aplicación en Python 2, las funciones de intercambio tendrán un gran impacto en el uso de la memoria. En Python 3, la funcionalidad xrange() se implementa de forma predeterminada. Si no hay una función xrange(), entonces la función range() actuará así.
5. Usa conjuntos y uniones
Si está utilizando demasiados bucles en su código, ejercerá una presión innecesaria sobre su servidor. Este será el enfoque más eficiente. Puede obtener los valores superpuestos en dos listas. Puede hacer esto usando bucles for anidados, como se indica a continuación…
a = [7,8,1,0,2] b = [2,8,9,1,3] overlaps = [] for x in a: for y in b: if x==y: overlaps.append(x) print(overlaps)
El código anterior imprimirá la lista [8, 1, 2]. Aquí el número de comparaciones será muy grande, muy rápidamente. Veamos otro enfoque…
a = [7,8,1,0,2] b = [2,8,9,1,3] overlaps = set(a) & set(b) print(overlaps)
El código anterior imprimirá el diccionario {8, 1, 2}. Aquí obtendrá una buena velocidad y un aumento de memoria como resultado.
6. Sea perezoso con la importación de módulos
Los expertos en Python sugieren importar todos los módulos al inicio de su programa. Puede ordenarlos alfabéticamente. Este enfoque lo ayudará a realizar un seguimiento de las dependencias que tiene su programa, pero la desventaja es que sus importaciones se cargan al inicio.
¿Puedes probar un enfoque diferente? Puede cargar los módulos cuando los necesite. Esta técnica lo ayudará a distribuir el tiempo de carga de los módulos de manera uniforme. Esto reducirá los picos de uso de la memoria.
7. Use «en» si es posible
Se recomienda utilizar la palabra clave “in” para comprobar la pertenencia a una lista.
for username in member_list: print('{} is a member'.format(username))
Conclusión
Todo el código anterior lo ayudará a ejecutar su código más rápido y esto le permitirá obtener un mejor rendimiento de Python de su aplicación. A medida que progreses con Python, encontrarás muchos consejos y tú mismo aprenderás a optimizar tu código en Python. Usarás listas, diccionarios, tuplas y muchas otras cosas en Python y mientras construyes tu lógica o agregas algunas características, poco a poco te darás cuenta de cómo se pueden optimizar las cosas.
Publicación traducida automáticamente
Artículo escrito por anuupadhyay y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA