Descubriendo las últimas mejoras en la programación de Python
Características bastante interesantes
Python la tendencia del futuro
En
el artículo anterior, se le han presentado las principales mejoras y
avances en Python 3.11. Sin embargo, hay características adicionales que pueden
no ser tan prominentes, pero que sin embargo son dignas de mención. En esta
sección, profundizaremos en algunas de estas características, incluida una
mayor velocidad, modificaciones a las excepciones y una pequeña mejora en el
formato de cadena.
Velocidad de inicio mejorada
Uno
de los resultados emocionantes del proyecto Faster CPython son los tiempos de
inicio más rápidos. Cuando inicia un script de Python, el intérprete se somete
a varios procesos de inicialización, lo que hace que incluso los programas
simples tarden unos milisegundos en ejecutarse en Windows, Linux y macOS.
PS> Measure-Command {python -c "pass"}
La
opción "-c" se utiliza para pasar un programa directamente a través
de la línea de comandos. Cuando se utiliza, todo el programa está representado
por una sola instrucción de paso, que no tiene ningún efecto.
En
la mayoría de los casos, el tiempo necesario para iniciar un programa es
insignificante en comparación con el tiempo necesario para ejecutar el código.
Sin embargo, en scripts más cortos, comúnmente utilizados en aplicaciones de
línea de comandos, el tiempo de inicio puede tener un impacto significativo en
el rendimiento del programa.
Como
ilustración, considere el siguiente guión, que se inspiró en el clásico
programa cowsay:
# snakesay.py#
Importar el módulo sys
import sys# Unir todos los argumentos pasados en la línea de comandos después del
nombre del script message = " ".
join(sys.argv[
1:])# Calcular la longitud del mensajebubble_length = len(
message
) + 2#
Usar el literal rf string para crear la cadena de salidaprint
(
rf""" {"
_" * bubble_length} ( {message} )
{" ̅"
* bubble_length
} \ \ __ \
[oo] (__)\ λ \\ _\\__ (_____)_ (___
_)Oo°""")
En
el snakesay.py de script, el usuario introduce un mensaje a través de la línea
de comandos. El mensaje se muestra dentro de una burbuja de diálogo junto con
un lindo gráfico de serpiente. El usuario puede introducir cualquier mensaje
que desee, como se muestra en el ejemplo siguiente:
$ python
snakesay.py Inicio más rápido!
_____ ( Inicio más rápido! )
̅ ̅ ̅ ̅ ̅ ̅ ̅ ̅ ̅ ̅ ̅ ̅ ̅ ̅ ̅ ̅ \ \ __ \ [oo] (__)\ λ \\ _\\__ (_____)_
(___)Oo°
Este
script sirve como un ejemplo básico de una aplicación de línea de comandos, que
generalmente se ejecuta rápidamente. Sin embargo, todavía tarda unos
milisegundos en ejecutarse debido a la sobrecarga causada por Python importando
varios módulos, incluso aquellos que no son importados explícitamente por el usuario.
El
código siguiente muestra cómo medir el tiempo dedicado a importar módulos
mediante la opción -X importtime en Python.
# snakesay.py
import sys
import time # Añadido para
mostrar el mensaje de tiempo de importación = " ".join(sys.argv[1
:])bubble_length
= len(message) + 2# Código para imprimir el mensaje en la burbuja
de diálogo junto con una
huella de
serpiente( rf"""
{"
_
"
* bubble_length} (
{message} ) {"
̅" *
bubble_length} \
\ __ \ [oo] (__)\ λ \\ _\\__ (_____)_ (_____)Oo°""")
Para utilizar la opción -X importtime , ejecute el siguiente comando
en su terminal:
$ python -X
importtime -S snakesay.py ¡Las importaciones son más rápidas!
Esto generará el tiempo dedicado a importar cada
módulo en microsegundos:
Tiempo de
importación: Self [US] |
Acumulado | Tiempo de importación del paquete importado:
283
| 283 | _io
tiempo de importación: 56
| 56 | Tiempo de importación del mariscal
: 647 | 647 | Tiempo de importación de POSIX
: 587 | 1573 |
_frozen_importlib_external
tiempo de importación: 167
| 167 | Tiempo
de importación: 191
| 358 | Tiempo
de
importación de Zipimport: 90
| 90 | _codecs
tiempo de importación: 561
| 651 | Tiempo de importación de códecs
: 825 | 825 | Tiempo de importación de encodings.aliases
: 1136 | 2611 |
Tiempo de importación de codificaciones
: 417 | 417 |
encodings.utf_8
tiempo de importación: 174
| 174 | _signal
tiempo de importación: 56
| 56 | _abc
tiempo de importación: 251
| 306 | Tiempo
de importación ABC:
310 | 616 |
io
La última columna, paquete importado, muestra la jerarquía de los
módulos importados. Por ejemplo, abc fue importado por io. Esta información puede ser útil
para identificar qué módulos pueden tardar más en importarse y, por lo tanto,
contribuir al tiempo total de importación.