Mejora la legibilidad y calidad del código Python

Publicado el 24 octubre 2022 por Daniel Rodríguez @analyticslane

Escribir un código legible y de calidad debería ser una de nuestras preocupaciones. No solamente es necesario que el programa realice la tarea para la que se ha diseñado de una forma eficiente, sino que también debería ser fácil de leer y comprender para cualquiera que lo desee revisar. Incluidos nosotros en un futuro. Recordando que la teoría de las ventanas rotas nos dice que un código mal cuidado empeora con el tiempo. Anteriormente he presentado alguna herramienta para realizar auditorías de calidad de código y auditorías enfocadas en el rendimiento para Python. En esta ocasión veremos una librería con la que revisar y mejorar la legibilidad y calidad del código Python.

Instalación de Refurb

Refurb es una librería con la que se puede modernizar el código Python. Ayudando a conseguir que un buen código sea aún mejor. Al igual que la mayoría de las librerías para Python, Refurb se puede instalar usando pip en la línea de comandos. En concreto se debe ejecutar el siguiente código.

pip install refurb

Nótese que la instalación de Refurb requiere tener instalado Python 3.10, si este trabajado con una versión anterior será necesario actualizar. Aunque la librería puede revisar el código anterior. Una vez hecho esto, para revisar el código, simplemente se debe ejecutar el comando

refurb code.py

En donde code.py es el archivo que contiene el código que se desea revisar.

Ejemplo de uso de Refurb

En la documentación de Refurb se puede ver un código de ejemplo con el que se puede ver el tipo de consejos que puede ofrecer a un programador de Python. Si escribimos el siguiente código en un archivo code-py

for filename in ["file1.txt", "file2.txt"]:
    with open(filename) as f:
        contents = f.read()

    lines = contents.splitlines()

    for line in lines:
        if not line or line.startswith("# ") or line.startswith("// "):
            continue

        for word in line.split():
            print(f"[{word}]", end="")

        print("")

Y se ejecuta el comando

refurb code.py

aparecerán por pantalla los siguientes mensajes

code.py:1:17 [FURB109]: Replace `in [x, y, z]` with `in (x, y, z)`
code.py:2:5 [FURB101]: Use `y = Path(x).read_text()` instead of `with open(x) as f: y = f.read()`
code.py:8:40 [FURB102]: Replace `x.startswith(y) or x.startswith(z)` with `x.startswith((y, z))`
code.py:14:9 [FURB105]: Use `print() instead of `print("")`

Ahora se pueden analizar los resultados obtenidos

Usar una tupla en lugar de una lista

El primer mensaje Replace `in [x, y, z]` with `in (x, y, z)` indica que debemos reemplazar la lista por una tupla. Esto será más eficiente ya que el objeto no va a cambiar y por eso no es necesario usar una lista que es mutable.

Usar read_text() en lugar de read()

El segundo mensaje Use `y = Path(x).read_text()` instead of `with open(x) as f: y = f.read()` indica que es más eficiente leer todos los archivos usando el comando read_text()en lugar de read().

Evitar código incensario

La tercera línea Replace `x.startswith(y) or x.startswith(z)` with `x.startswith((y, z))` que en lugar de usar el método startswith() dos veces para comprobar si la línea comienza "# " o "// " es mejor comprobar ambas opciones a la vez. Algo que se traduce en un código Python más eficiente.

No pasar información innecesaria a print()

Finalmente, el cuarto consejo Use `print() instead of `print("")` indica que cuando no se imprime nada no es necesario ni recomendable pasar una cadena vacía a print().

Conclusiones

En esta ocasión se ha visto Refurb, una nueva librería con la que se puede revisar los programas para conseguir una mayor legibilidad y calidad del código Python. Esta es una herramienta con la que podemos hacer que nuestro código sea aún más elegante y eficiente.