Tips para mejorar como programador Python



@eduardo_gpg

Número de visitas 1976

Tiempo de lectura 5 min

27 Diciembre 2021

Convertirse en un desarrollador de X lenguaje no solo implica conocer la sintaxis básica del mismo, si no además es necesario conocer el funcionamiento el lenguaje per se. ¿A qué me refiero con esto? Si bien bien conceptos como variables, ciclos, condiciones, clases, por mencionar algunos, son fácilmente trasladables de un lenguaje a otro, cada lenguaje de programación posee características muy particulares que los hacen diferentes al resto. 😎

Y conocer y aplicar estas características pueden hacer que nuestro código sea mucho más legible, mantenible, e inclusive, pueda tener un mayor performance.

Es por ello que, para este post, me guastaría compartir, con todas y todos ustedes, un par de tips Python que sin duda te ayudarán a mejorar tu código haciéndolo aun más Pythonico.

Los tips no tienen un orden en particular o un orden de importancia, tú puedes aplicarlos según necesidades.

Bien, como ya es costumbre, sin más dilación, comencemos con este post. 🥳

Desempaquetado de tuplas

Regularmente cuando queremos acceder algún elemento dentro de una colección haremos uso de índices.

numbers= [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
first = listado[0]
last = numbers[-1]

Sin embargo, ¿Qué pasa si te digo que es posible obtener el mismo resultado únicamente utilizando variables, guiones bajo () y asteriscos (*)? Bueno para implementamos el concepto de _Unpacking. 🤖

numbers= [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
first, *_, last = numbers

Para este segundo ejemplo obtenemos el mismo resultado, almacenamos en variables el primer y último elemento de la colección. Solo que en este caso evitamos hacer uso de los índices. El *_ denota que hacemos caso omisos a todos los elementos de la colección que se encuentren entre el primer y último elemento.

Y esto es completamente aplicable al momento de iterar colecciones.

Evitemos esto:

coordinates = [ (-100, 200), (-100, 200), (-100, 200), (-100, 200), (-100, 200) ]

for coordinate in coordinates:
    lat = coordinate[0]
    long = coordinate[0]

    print(lat, long)

Y optemos por esto:

coordinates = [ (-100, 200), (-100, 200), (-100, 200), (-100, 200), (-100, 200) ]

for lat, long in coordinates:
    print(lat, long)

Argumentos opcionales

Algo que sin duda me voló la cabeza cuando lo aprendí, fue el uso de argumentos opcionales. Sí, así como lo lees.

En Python es posible definir funciones con parámetros con valores por default, esto quiere decir que los argumentos son opcionales. La única regla es que: todos los parámetros con valor por default deben encontrarse a la derecha del listado.

Ejemplo.

def saludar(nombre, mensaje='Hola, te damos la bienvenida'):
    return f'{mensaje} {nombre}'

>>> saludar('Eduardo')
'Hola, te damos la bienvenida Eduardo'

>>> saludar('Eduardo', 'Bienvenido a PyWombat')
'Bienvenido a PyWombat Eduardo'

Docstring

Y siguiendo con el tema de funciones, al documentación de las mismas es algo super importante.

Ya tenemos un Post completo hablando sobre ello, así que ti invito a que le eches un vistazo.

Pero a manera de recordatorio, recuerda que es posible testear tú código Python con únicamente comentarios.

def palindromo(sentencia):
    """Retornar Verdadero o Falso si el parámetro es o no un palíndromo

    Examples
    --------
    >>> palindromo('Anita lava la tina')
    True

    >>> palindromo('Se van sus naves')
    True

    >>> palindromo('PyWombat')
    False
    """

    sentencia = sentencia.lower().replace(' ', '')
    return sentencia == sentencia[::-1]

Ellipsis

Regularmente cuando queremos crear un nuevo bloque de código pero aun no tenemos bien definido que se debe hacer, usamos la palabra reservada pass. Esto funciona bastante bien, sin embargo ¿Sabias qué también es posible implementar Ellipsis (una secuencia de tres puntos (...)) ?

Ellipsis como tal es un objeto en Python y podemos utilizarlo en bloques de nuestro código.

>>> ...
Ellipsis
def palindromo():
    ....

Uso de funciones lambas 🐬

Regresando a las funciones, un tema que me apasiona mucho es del de funciones anónimas, o también conocidas como funcionas lambdas, tema el cual de hecho ya hablamos en unpost anterior. De igual forma, te invito a que le eches un vistazo, no te arrepentirás.

A forma de recapitulación, recordemos que las funciones lambdas podemos almacenarlas en variables y son perfectas cuando deseemos abstraer una solo tarea en particular en una sola línea de código, pudiendo así reutilizarla la N cantidad de veces que deseemos.

>>> numbers = [10, 20, 30, 40, 50, 60]
>>> function = lambda x : (x ** 2) + 10

>>> list(map( function, numbers))
[110, 410, 910, 1610, 2510, 3610]

List Comprehensions

Sin duda el tema de List Comprehensions no podía quedar fuera de listado, y ya con un Vídeo en la plataforma, te recuerdo al estructura básica.

[ expression for item in list if conditional ]

Guion bajo 🪐

Algo que muy pocos desarrolladores saben, es que siempre que deseemos obtener el resultado de la última expresión ejecutada, haremos uso del guion bajo.

Ejemplos.

>>> 10
10

>>> _ + 20
30
>>> 'Hola mundo '
'Hola mundo'

>>> _ + 'PyWombat'
'Hola mundo PyWombat'

Este funcionará perfecto siempre que nos encontremos en el shell interactivo de Python. 🐧

Operador Walrus En Python

El operador Walrus tampoco podía faltar en este listado.

Sin duda un operado que te recomiendo utilizar siempre que podamos.

if (resultado := (10 + 20 ) / 2)> 10:
    print(f'El resultado ( {resultado} ) es mayor que 10.')
else:
    print(f'El resultado ( {resultado} ) es menor que 10.')

Case 🐍

A partir de la versión 3.10 de Python ya es posible utilizar el "Switch"de forma nativa en el lenguaje. Para ello nos apoyaremos de las palabras reservadas match y case.

Ejemplos.

def http_error(status):
    match status:
        case 400:
            return "Bad request"
        case 404:
            return "Not found"
        case 418:
            return "I'm a teapot"
        case _:
            return "Something's wrong with the internet"

En conjunto con condiciones.

score = 10

match score:
    case 10:
        print('Felicidades, aprobarte la materia con 10.')
    case 8 | 8:
        print('Felicidades, aprobarte la materia.')
    case 7:
        print('Aprobaste la materia.')
    case _ if (score < 7):
        print('Reprobaste la materia.')
    case _:
        print('Contacta con un administrador')

Uso del Else en Ciclos

A pesar de lo que muchos pueden llegar a pensar, el uso del bloque else no se encuentra limitado únicamente a las condiciones con if, no para nada, el else puede ser utilizado tanto en el ciclo while como en el ciclo for. El bloque del else se ejecutará (respectivamente) cuando la condición deje de cumplirse o cuando se hayan iterado todos los elementos de la colección.

Veamos un par de ejemplos.

n = 0

while n < 10:
    n += 1
    print(n)
else:
    print('Se dejo de cumplir la condición')
for element in [10, 20, 30, 40, 50]:
    print(element)
else:
    print('Se han iterado sobre todos los elementos de la colección.')

Conclusión

Listo, estos son 10 tips que quería compartir en esta ocasión con todos ustedes. ¿Ya conocías alguno de ellos? Cuéntanos ¿Qué te ha parecido este listado? Que tip añadirías tú. Por favor, déjanoslo saber en la sección de comentarios.

Sin más, mi nombre es Eduardo, y nos estaremos leyendo en el siguiente post. 🍻


¿El contenido te resulto de ayuda?

Para poder dejar tu opinión es necesario ser un usuario autenticado. Login

Mauro

genial, describí algunas cosas nuevas y buenas

Más Tips y Ejercicios 🐍

Adquiere una subscripción PyWombat por tan solo $3 USD. al mes.

Conoce los beneficios de ser usuario premium:
Niveles desbloqueados: Ten accesos a todos los niveles de ejercicios. 🔓
Nuevo límite: Incrementa tu límite de ejercicios por semana. 🚀
Contenido único: Recibe semanalmente recursos exclusivos de Python (Videos, Artículos y Capitulos del libro PyWombat, comienza como desarrollador Python. 🐍