Image

21 Trucos de Python Que No te Enseñan En Tus Inicios

Daniel Morales
Dec 11, 2020


Cuando empezamos a estudiar Python lo hacemos de diferentes fuentes, tales como videos, libros, blogs, cursos, bootcamps, youtube o universidades y una infinidad de opciones más.

Sin embargo, con el “afán” de cumplir con las nociones básicas y de entender las generalidades del lenguaje, muchas veces se pasan por alto pequeños detalles y trucos que nos facilitan la vida como programadores en python, sea que lo utilices para desarrollo web, de escritorio o para data science.

Estos trucos deberían estar presentes desde el principio de nuestra formación, y si no lo estaban ya no es una excusa para no usarlos :)


21 Trucos de Python Que No te Enseñan En Tus Inicios.png 1.05 MB


1- Crear un paquete 


Los módulos ayudan a compartimentar el código reutilizable, como las funciones, variables y clases de Python. Organizarse de esta manera puede hacer que el código sea más fácil de entender y usar.

Para mí, este es el mayor impulsor de la productividad para los programadores en Python. Te permite trabajar más rápido y cometer menos errores. Además, al escribir paquetes, también mejoras tus habilidades de programación.

Un paquete contendrá uno o más módulos relevantes. Podemos crear un paquete llamado miprimerpaquete, siguiendo los siguientes pasos:

  1. Crea una nueva carpeta llamada MiPrimerPaquete.
  2. Dentro de MiPrimerPaquete, crea una subcarpeta con el nombre miprimerpaquete.
  3. Utilizando un IDE en Python como atom, sublime o pycharm, crea los módulos saludar_visitantes.py (que proporcionará el código para dar la bienvenida a los visitantes cuando entren en el paquete), funciones.py (que proporcionará el código para operar varias funciones), y clases.py (que proporcionará las plantillas desde las que podremos instanciar nuevos objetos)

Notas:
Asegúrate de usar estas convenciones de PEP8 para los nombres de los paquetes y módulos
Antes se exigía que un paquete tuviera un archivo __init__.py, pero con la introducción de los paquetes de espacios de nombres, esto ya no es así.


2- Compruebe el tamaño de los paquetes


Después de instalar todas las dependencias de las bibliotecas necesarias para el funcionamiento de su paquete, es posible que su SSD esté un poco desordenado. Comprobar el tamaño del paquete instalado te ayudará a entender qué paquetes están ocupando más espacio. A partir de aquí, puedes elegir qué paquetes puedes mantener y que paquetes puedes desinstalar

Para encontrar la ruta de los paquetes instalados en tu máquina Linux, escribe:

pip3 show "some_package" | grep "Location:"
Esto devolverá 

path/to/all/packages. 
Algo así como: 

/Users/yourname/opt/anaconda3/lib/python3.7/site-packages
Inserte esa ruta de archivo en el comando de abajo:

du -h path/to/all/packages

donde du del uso del espacio en el disco del sistema de archivos.

Este código dará como resultado el tamaño de cada paquete. La última línea de salida contendrá el tamaño de todos los paquetes.


3 - Comprobar el uso de memoria


Al igual que con la optimización de su espacio de trabajo, también puede ser útil examinar el uso de la memoria de los componentes del código. Puedes hacerlo usando el método sys.getsizeof de Python implementando el siguiente código:

import sys
variables = ['In', 'Out', 'exit', 'quit', 'get_ipython', 'variables']
 
# Get a sorted list of the objects and their sizes
sorted([(x, sys.getsizeof(globals().get(x))) for x in dir()
    if not x.startswith('_') and x not in sys.modules and
    x not in variables], key=lambda x: x[1], reverse=True)

4- Mejore su línea de comandos


Click es una herramienta de línea de comandos para Python que permite crear programas e interfaces intuitivos para el bash shell. Click admite diálogos de opciones, avisos al usuario, solicitudes de confirmación, valores de variables de entorno y mucho más.

Aquí hay un script de ejemplo que podría utilizarse para solicitar una contraseña a un usuario

@click.command()
@click.option('--password', prompt=True, hide_input=True,
              confirmation_prompt=True)
def encrypt(password):
    click.echo('Encrypting password to %s' % password.encode('rot13'))

El resultado será

$ encrypt
Password:
Repeat for confirmation:

5- Comprueba que todo cumpla con las convenciones de Python PEP8


El paquete nblint permite ejecutar el motor de estilo pycodestyle dentro de Jupyter Notebook. Esto comprobará su código (es decir, el linter) con el motor de pycodestyle.

Linting resalta cualquier problema de sintaxis o de estilos en tu código Python, haciéndolo menos propenso a errores y más legible para tus colegas. 

Las herramientas de linting fueron introducidas por primera vez por depuradores frustrados en 1978, y la práctica recibe su nombre del acto de quitar pequeños trozos de tela suelta de la ropa que sale de la secadora.

Leer También: Los 8 Mejores Libros De Python En Español Para Leer En 2021


6- Limpia el caché de Conda


En primer lugar, una nota rápida sobre la diferencia entre pip y conda. pip es la herramienta recomendada por la Autoridad de Empaques de Python para instalar paquetes de Python Package Index, PyPI. conda es un gestor de paquetes y entornos multiplataforma de Anaconda.

En general, es una mala idea mezclar los gestores de paquetes de pip y conda. Esto se debe a que los dos administradores no se hablan entre sí, lo que puede crear conflictos entre paquetes. Considere la posibilidad de usar pip exclusivamente dentro de entornos virtuales a menos que esté listo para comprometerse con conda.

Ya hemos cubierto cómo limpiar los paquetes que has instalado en pip - aquí hay instrucciones para eliminar los paquetes instalados en conda. Si has estado usando el gestor de paquetes de conda, puedes liberar espacio eliminando los paquetes no utilizados y las cachés usando este código:

conda clean --all

7- Asignación múltiple para las variables


Python nos permite asignar valores para más de una variable en una sola línea. Las variables pueden ser separadas usando comas. La línea única para asignaciones múltiples tiene muchos beneficios. Se puede usar para asignar múltiples valores para múltiples variables o múltiples valores para un solo nombre de variable. Tomemos un enunciado del problema en el que tenemos que asignar los valores 50 y 60 a las variables a y b. El código habitual será como el siguiente.

a = 50
b = 60
print(a,b)
print(type(a))
print(type(b))

Resultado

50 60
<class 'int'>
<class 'int'>

Condición I - Valores iguales a las variables

Cuando las variables y los valores de las múltiples asignaciones son iguales, cada valor se almacenará en todas las variables.

a , b = 50 , 60
print(a,b)
print(type(a))
print(type(b))

Resultado

50 60
<class 'int'>
<class 'int'>

Ambos códigos dan los mismos resultados. Este es el beneficio de usar asignaciones de valores de una línea.

Condición II - Valores mayores que las variables

Intentemos aumentar el número de valores en el código anterior. Múltiples valores pueden ser asignados a una sola variable. Al asignar más de un valor a una variable debemos usar un asterisco antes del nombre de la variable.

a , *b = 50 , 60 , 70
print(a)
print(b)
print(type(a))
print(type(b))

Resultado

50
[60, 70]
<class 'int'>
<class 'list'>

El primer valor se asignará a la primera variable. La segunda variable tomará una colección de valores de los valores dados. Esto creará un objeto de tipo lista.

Condición III - Un valor para múltiples variables

Podemos asignar un valor a más de una variable. Cada variable será separada usando un igual al símbolo.

a = b = c = 50
print(a,b,c)
print(type(a))
print(type(b))
print(type(c))

Resultado


50 50 50
<class 'int'>
<class 'int'>
<class 'int'>

8- Swapping de dos variables


El swapping es el proceso de intercambio de los valores de dos variables entre sí. Esto puede ser útil en muchas operaciones de informática. 

Aquí, he escrito dos métodos principales utilizados por el programador para intercambiar los valores así como la solución óptima.

Método I - Usando una variable temporal

Este método utiliza una variable temporal para almacenar algunos datos. El siguiente código se escribe con el nombre de la variable temporal.

a , b = 50 , 60
print(a,b)
temp = a+b  #a=50 b=60 temp=110
b = a       #a=50 b=50 temp=110
a = temp-b  #a=60 b=50 temp=110
print("After swapping:",a,b)


Resultado
50 60
After swapping: 60 50

Método II - Sin utilizar una variable temporal

El siguiente código intercambia la variable sin usar una variable temporal.

a , b = 50 , 60
print(a,b)
a = a+b  #a=110 b=60
b = a-b  #a=110 b=50
a = a-b  #a=60  b=50
print("After swapping:",a,b)


Resultado

50 60
After swapping: 60 50

Método III - Solución óptima en Python

Este es un enfoque diferente para intercambiar variables usando Python. En la sección anterior, hemos aprendido sobre las asignaciones múltiples. Podemos usar el concepto de intercambio.
a , b = 50 , 60
print(a,b)

a , b = b , a
print("After swapping",a,b)

Resultado

50 60
After swapping 60 50

9- Invertir un String


Hay otro truco genial para invertir un string con Python. El concepto utilizado para invertir un string se llama slicing. Cualquier string puede ser invertido usando el símbolo [::-1] después del nombre de la variable.

my_string = "MY STRING"
rev_string = my_string[::-1]
print(rev_string)

Resultado

GNIRTS YM

10- Dividiendo las palabras en una línea


No se requiere un algoritmo especial para dividir las palabras en una línea. Podemos usar la palabra clave split() para este propósito. Aquí he escrito dos métodos para dividir las palabras.

Método I - Usando iteraciones

my_string = "This is a string in Python"
start = 0
end = 0
my_list = []

for x in my_string:
   end=end+1
   if(x==' '):
       my_list.append(my_string[start:end])
       start=end+1

my_list.append(my_string[start:end+1])
print(my_list)


Resultado

['This ', 'is ', 'a ', 'string ', 'in ', 'Python']

Método II - Usando la función split()

my_string = "This is a string in Python"
my_list = my_string.split(' ')
print(my_list)

Resultado

['This ', 'is ', 'a ', 'string ', 'in ', 'Python']


11- Lista de palabras en una línea


Este es el proceso opuesto al anterior. En esta parte vamos a convertir una lista de palabras en una sola línea usando la función join. La sintaxis para usar la función de unión se da a continuación.

Sintaxis: "”.join(string)

my_list = ['This' , 'is' , 'a' , 'string' , 'in' , 'Python']
my_string = " ".join(my_list)

Resultado

This is a string in Python

12- Más de un Operador Condicional


Por ejemplo, si necesitamos imprimir algo cuando una variable tiene un valor mayor de 10 y menor de 20, el código será algo como lo siguiente.

a = 15
if (a>10 and a<20):
   print("Hi")
En lugar de esto podemos combinar el operador condicional en una sola expresión.

a = 15
if (10 < a < 20):
   print("Hi")

Resultado

Hi

13- Encontrar el elemento más frecuente en una lista


El elemento que aparece la mayor parte del tiempo en una lista será entonces el elemento más frecuente de la lista. El siguiente snippet le ayudará a obtener el elemento más frecuente de una lista.

my_list = [1,2,3,1,1,4,2,1]
most_frequent = max(set(my_list),key=my_list.count)
print(most_frequent)

Resultado
1

14- Encontrar la ocurrencia de todos los elementos de la lista


El código anterior dará el valor más frecuente. Si necesitamos saber la ocurrencia de todos los elementos únicos de una lista, entonces podemos ir al módulo collection de Python. Collection es un maravilloso módulo en Python que da muy buenas características. El método Counter da un diccionario con el par de elementos y ocurrencias.

from collections import Counter
my_list = [1,2,3,1,4,1,5,5]
print(Counter(my_list))


Resultado

Counter({1: 3, 5: 2, 2: 1, 3: 1, 4: 1})

15- Comprobando el anagrama de dos strings


Dos strings son anagramas si una cadena está compuesta por los caracteres de la otra cadena. Podemos usar el mismo método de contador del módulo Collections.
from collections import Counter
my_string_1 = "RACECAR"
my_string_2 = "CARRACE"

if(Counter(my_string_1) == Counter(my_string_2)):
   print("Anagram")
else:
   print("Not Anagram")


Resultado

Anagram

16- Usando condicionales con en el operador ternario


La mayoría de las veces, usamos estructuras condicionales anidadas en Python. En lugar de usar la estructura anidada, una sola línea puede ser reemplazada con la ayuda del operador ternario. La sintaxis es la siguiente.

Syntax: Statement1 if True else Statement2

age = 25
print("Eligible") if age>20 else print("Not Eligible")

Resultado

Eligible

17- Convierte lo mutable en inmutable

La función frozenset() se utiliza para convertir un objeto mutable iterable en inmutable. Usando esto podemos congelar un objeto para que no cambie su valor.

my_list = [1,2,3,4,5]
my_list = frozenset(my_list)
my_list[3]=7
print(my_list)

Resultado

Traceback (most recent call last):
 File "<string>", line 3, in <module>
TypeError: 'frozenset' object does not support item assignment

Al aplicar la función frozenset() en la lista, la asignación de elementos está restringida.


18- Aplicar una función para todos los elementos de una lista


El map() es una función de orden superior que aplica una función particular para todos los elementos de una lista.

Syntax: map(function, iterable)

my_list = ["felix", "antony"]
new_list = map(str.capitalize,my_list)
print(list(new_list))

Resultado

['Felix', 'Antony']

19- Filtrar valores con la función filter()


La función filter() se utiliza para filtrar algunos valores de un objeto iterable. La sintaxis de la función de filtro se indica a continuación.

Sintaxis: filter(function, iterable)

def eligibility(age):
   return age>=24
list_of_age = [10, 24, 27, 33, 30, 18, 17, 21, 26, 25]
age = filter(eligibility, list_of_age)
print(list(age))


Resultado

[24, 27, 33, 30, 26, 25]

20- Calculando el tiempo de ejecución de un programa


Time es otro módulo útil en Python que puede ser utilizado para calcular el tiempo de ejecución.

import time
start = time.clock()
for x in range(1000):
   pass
end = time.clock()
total = end - start
print(total)


Resultado

0.00011900000000000105

21- Imprimir un calendario mensual en Python


El módulo Calendar tiene muchas funciones relacionadas con las operaciones basadas en las fechas. Podemos imprimir el calendario mensual usando el siguiente código.

import calendar
print(calendar.month("2020","06"))

Resultado

June 2020
Mo Tu We Th Fr Sa Su
1  2  3  4  5  6  7
8  9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30

Conclusion


Espero que hayan disfrutado de este artículo. Como nota final, tienes que entender que aprender los trucos no es una obligación. Pero si lo haces, puedes ser único entre otros programadores. La práctica continua es necesaria para adquirir fluidez en la programación.

Si quieres profundizar en tu conocimientos de python, tenemos este curso de python intermedio para tí!

¡Gracias por leer este artículo!

Más articulos que podrían ser de su interés:

“21 Trucos de Python Que No te Enseñan En Tus Inicios”
– Daniel Morales twitter social icon Tweet

Compartir este artículo:

0 Comentarios

Challenge Comment
Ingresar para Comentar
divider graphic

Artículos Relacionados

Jan 15, 2021

21 Recursos Para Aprender Matemáticas Para Data Science

Este es quizás uno de los mayores temores de quienes se inician en el área de data science, aprender/repasar matemáticas. Y es que seamos sinceros,...

Daniel Morales
Por Daniel Morales

Plan De Estudios Para Aprender Data Science En Los Próximos 12 Meses

Cómo habíamos hablado en un post anterior, estamos terminando 2020 y es hora de hacer planes para el próximo año, y uno de los planes y preguntas m...

Daniel Morales
Por Daniel Morales
Dec 04, 2020

Los 8 Mejores Libros De Python En Español Para Leer En 2021

Estamos terminando el año 2020 y es hora de empezar a planear el 2021. Dentro de esta planeación es importante tener en cuenta nuestra educación y ...

Daniel Morales
Por Daniel Morales
Partners

graphical divider
Icon

Únete a nuestra comunidad privada en Slack

Manténgase al día participando de ésta gran comunidad de data scientists en latinoamérica. Hablamos sobre los retos, proyectos y competiciones en data science, trabajos en data science, cómo practicar las habilidades, qué podemos aprender y mucho más!

 
Te enviaremos un link de invitación a tu email inmediatamente.
arrow-up icon