Aprender Python es una de las aventuras más fascinantes en las que vas a participar. Es divertido, puedes construir proyectos interesantes y las oportunidades laborales son enormes.
Sin embargo, es normal que, al menos al inicio, no tengamos muy claro ciertos conceptos y que la curva de aprendizaje se ponga más empinada. Es por eso que en este artículo te voy a explicar temas que harán que tu experiencia de aprendizaje en este lenguaje sea más amena.
¿Eres nivel intermedio o pro en Python? Igual quédate. Estoy seguro de que tu pensamiento computacional mejorará luego de leer este blog.
⚠️Ten en cuenta que para sacar el máximo provecho es necesario que tengas conocimientos básicos de Python. Todo esto lo puedes aprender en **Curso de Fundamentos de Python.
El intérprete de Python es un software que ejecuta las instrucciones de un script, sin necesidad de una compilación previa. Este lenguaje es compilado y se diferencia de los interpretados porque genera un resultado, u output, a partir de un programa y no un programa escrito en Assembly.
Para usar el intérprete podemos valernos de la Shell de Python. Entonces, nos vamos a la terminal y ponemos:
Python3
El comando anterior funciona en distros de Linux y MacOS. Si estás en Windows, prueba con python
.
Ya dentro de la Shell verás algo como esto:
Allí ya puedes empezar a ejecutar código Python. Intenta poner lo siguiente:
2 + 2
O esto:
for i in range(5):
print(i)
¿Qué observas?
Finalmente, para salir del intérprete puedes poner:
exit()
Cuando instalas Python en tu computadora, este se aloja en un directorio. Para saber dónde, puedes poner:
which python3
En mi caso, esto me devolverá /usr/bin/python3
porque estoy en una distro de Linux (Ubuntu). Pero en tu caso, puede ser diferente por tener otro sistema operativo.
El punto es que con el Python alojado en esa dirección funcionan todos los proyectos en tu computadora. Y también pasa esto si instalas alguna otra librería. Mira el diagrama de la siguiente imagen.
¿Qué pasa si tienes proyectos que funcionan con versiones diferentes de Python o de las otras librerías que instalaste? Por ejemplo, tienes un proyecto que funciona con Python 3.10.6 y otro que funciona con Python 3.8.2. ¿Cómo lidiar con esta diferencia de versiones?
Es aquí que vienen los ambientes virtuales. La idea es tener un Python diferente para cada proyecto en el que estés trabajando. O sea, aparte del Python alojado en el directorio general para toda tu computadora, vas a tener un Python alojado en una carpeta dentro de tu proyecto X
. Y así para tu proyecto Y
, tu proyecto Z
, etc. Entonces tus proyectos se verán así:
Crear y activar ambientes virtuales es muy sencillo. Primero veamos cómo hacerlo en sistemas basados en Unix como Linux y Mac OS. Te ubicas en la carpeta root del proyecto y corres los siguientes comandos:
#Para crear el ambiente virtual
python3 -m venv nameOfVirtualEnv
#Luego lo tienes que activarsource nameOfVirtualEnv/bin/activate
#Lo puedes desactivar así
deactivate
Ten en cuenta que nameOfVirtualEnv
es el nombre de tu ambiente virtual. Puede ser cualquiera. Pero te recomiendo ponerle env
o venv
para una mejor comunicación con otros desarrolladores y desarrolladoras. Además, verás una carpeta con este mismo nombre.
Si estás en Windows, puedes poner lo siguiente:
#Crear
py -m venv nameOfVirtualEnv
#Activar
.\nameOfVirtualEnv\Scripts\activate
#Desactivar
deactivate
Te sugiero que, si trabajas en Windows, uses una terminal basada en Unix como Cmder o WSL. Además, el Curso de Introducción a la Terminal y Línea de Comandos te viene perfecto para dominar la terminal.
Una función es un pedazo de código que toma valores de entrada, los procesa y después devuelve otros valores. Sus ventajas son que reducen las líneas de código, hacen que el código sea más prolijo y escalable. Su sintaxis viene así:
defhello(name):return'Hello, {name}!'.format(name=name)
Nuestra función recibe name
como argumento o valor de entrada y luego nos da un output habiendo procesado este valor, justo en la línea del return
. Algo clave en este punto es diferenciar entre hacer referencia a la función y ejecutar la función.
Hacer referencia a una función es solamente indicarle a Python dónde está para que posteriormente puede hacer algo con esta. Aquí no empleamos paréntesis. Por otra parte, ejecutar la función es hacer uso de la lógica de la función en ese momento. Aquí sí utilizamos los paréntesis. Veamos un ejemplo con la función que creamos.
hola = hello
print(hola)
print(hola('Axel'))
Mira que asignamos la referencia de la función hello
a hola
. Luego imprimimos tanto la referencia a la función, como su ejecución.
<function hello at 0x7fc826f0df30>
Hello, Axel!
La primera línea indica la clase (function) y su almacenamiento en memoria (0x7fc826f0df30). La segunda, es la ejecución en sí.
El concepto de funciones en python no se queda solo acá. Hay temas mucho más avanzados como los decoradores y dominarlos te convertirá en un desarrollador o desarrolladora top. Te dejo este artículo de decoradores en Python para que logres aquello. Irás de 0 a 100.
*args
y **kwargs
Cuando no tengas la total certeza de cuántos argumentos va a necesitar una función, puedes emplear *args
y **kwargs
. Los primeros son positional arguments y los otros keyword arguments.
Veamos un ejemplo en el cual vamos a sumar un número indefinido de números.
defsum_multiple(*args):return sum(args)
print(sum_multiple(1, 2, 4, 5))
El output es 12
. Ten en cuenta que puedes poner tantos números como desees. Al usar el argumento especial *args
, Python interpreta que entrarán varios valores e internamente los almacena en una tupla.
En el caso de los keyword arguments, Python los trata como diccionarios. Por lo tanto, podemos hacer uso de ellos con la sintaxis de clave-valor. Veamos un ejemplo en el que se imprimen los datos personales de una persona.
defpersonal_data(**kwargs):for k, v in kwargs.items():
print(f'{k}: {v}')
personal_data(name='Axel', country='Ecuador', height=182, born=1998)
Esto nos devuelve:
name: Axel
country: Ecuador
height: 182
born: 1998
En la documentación de varias librerías te encontrarás tanto con positional arguments, como con keyword arguments. Por eso es importante que lo entiendas para que tu interpretación al leer documentación sea la más óptima. Échale un ojo a Boxplot en Seaborn.
Lambdas son funciones con sintaxis especial que pueden tomar varios argumentos, pero solo tener una expresión. También las puedes encontrar como funciones anónimas. Primero miremos una función normal.
defsum_one(x):return x + 1
sum_one_funct = sum_one(5)
print(sum_one_funct)
Y ahora la misma función, pero como lambda.
sum_one_lambda = lambda x: x + 1
print(sum_one_lambda(5))
En ambos casos el resultado es 6
. Pero quiero que te fijes en las líneas de código que ahorramos. Este es el valor de las funciones lambda. Sin embargo, te recomiendo no abusar de este recurso porque tu código podría perder su legibilidad y hacerlo más difícil de escalar.
El scope se refiere al alcance que tienen los bloques de código de un programa en Python. Básicamente, están el local scope y el global scope. Este concepto viene bien visualizarlo en una función.
x = 5#Global scopedefmyfunction():
x = 1#Local scope
print(x)
myfunction()
print(x)
La variable x = 5
tiene global scope, porque se puede hacer referencia a ella desde cualquier parte del programa. Pero x = 1
que está dentro de la función myfunction
y tiene local scope. Por eso cuando ejecutamos myfunction()
se imprime 1
, porque su scope no va más allá de la función. No puede alterar valores globales.
También existen los closures. Son una forma de acceder a variables de otros scopes con nested fuctions. Por ejemplo:
defmain():
a = 1defnested():
print(a)
return nested
my_func = main()
my_func()
Para que una función se considere un closure debe cumplir con:
Las high order functions son funciones que reciben una función como parámetro y devuelven otra. Este tipo de funciones tienen las siguientes propiedades:
Python ya trae integradas un algunas de estas funciones: map
, filter
y reduce
.
La función filter
filtra los valores de un iterable según una función. Ten en cuenta que devuelve un iterador, no una lista o tupla. Su sintaxis es así:
filter(function, iterable)
Veamos un ejemplo:
nums = [1, 5, 3, 6, 7, 2]
defless_five(n):
numeros = [1, 3, 2]
returnTrueif n in numeros elseFalse
num_smaller_than_five = list(filter(less_five, nums))
print(num_smaller_than_five)
Esto retorna:
[1, 3, 2]
La función map
tiene una sintaxis similar. Solo que ahora le aplica la función a todos los valores del iterable.
map(function, iterable)
Veamos un ejemplo con la misma lista anterior:
nums = [1, 5, 3, 6, 7, 2]
squares = list(map(lambda x: pow(x, 2), nums))
print(squares)
Que nos devuelve:
[1, 25, 9, 36, 49, 4]
Y finalmente la función reduce
es útil cuando debas reducir un iterable a un solo valor. La función recibe 2 argumentos (ya no 1 solo). Debe importarse de functools
.
reduce(functionWith2Arguments, iterableObject)
Supongamos que tenemos una lista de 5 elementos que valen 2. Ahora queremos reducirla y obtener un 32, es decir, multiplicarlos a todos entre sí.
from functools import reduce
myList = [2, 2, 2, 2, 2]
allMultiplied = reduce(lambda a, b: a * b, myList)
print(allMultiplied)
Esto nos da 32
como respuesta.
Has aprendido 7 conceptos fundamentales para tu carrera profesional con Python. Estoy seguro de que con esto, tu pensamiento computacional mejorará mucho y podrás avanzar 10x más rápido en tus proyectos.
Pero el camino no llega hasta aquí. Te animo a seguir con el Curso de Python: Comprehensions, Funciones y Manejo de Errores para que pongas a prueba todo lo que acabas de aprender en este blog. Recuerda que en Platzi puedes encontrar una ruta especializada de Python para data science.
Finalmente, me gustaría que dejes en los comentarios si conoces algún otro concepto que creas relevante para desarrollar en Python. Te estaré leyendo.
Excelente articulo, en mi caso las argumentos indefinidos y las funciones Lambdas me cuesta entenderlas y aplicarlas correctamente.
¡Hola, Johan! El 4to módulo del Curso de Python: Comprehensions, Funciones y Manejo de Errores trata precisamente sobre esto. Puedes echarle un ojo.
Cuéntame si has logrado comprenderlo.
Excelente recopilación de las principales temáticas del Curso de Python: Comprehensions, Funciones y Manejo de Errores, el cual ya estoy por finalizar 💚
¡Genial! Me alegro mucho por eso, Sara. 🚀
Muy bueno, muchas gracias, yo me confundo un poco con el apply y el map
¡Hola, Edwar!
Al
apply
lo usamos para DataFrames. Por otra parte, elmap
se aplica sobre un iterable, como una lista, por ejemplo. Esta es la principal diferencia.Excelente artículo, aunque tanto map y las funciones lambdas se ven fáciles de entender, al menos a mí me cuesta aplicarlas bien.
¡Hola, Jesus!
Al inicio a veces nos resultan difíciles ciertos temas. Pero practicando lograrás la maestría. Te recomiendo ver el 4to módulo de Curso de Python: Comprehensions, Funciones y Manejo de Errores seguro que tu entendimiento mejorará. 😄
Excelente atículo, algunas cosas que aportar:
1-. Desde cierta versión de python3 se usa una nueva sintaxis más agradable para concatenar string, en vez de usar
return'Hello, {name}!'.format(name=name)
Ahora se usa
name = 'Carlos'return f'Hello, {name}!'
.
2-. Para activar los ambientes virtuales, el comando es para linux
source nameOfVirtualEnv/bin/activate
Si quieren hacerlo desde windows con power shell es
.
3-. Para entender mejor los
*args
y**kwargs
hay primero entender que el asterisco simple (*) es para destructurar listas o tuplas, y el asterisco doble (**) es para destructurar diccionarios, es decir, que si usamos una función que reciba estos parámetros nos imprimirá una lista y un diccionario en la ejecución de estos, ejemplodefprint_values(*args, **kwargs): print(args) print(kwargs) print_values(1, 2, "3", a=4, b=5, c="6") # results:# (1, 2, '3')# {'a': 4, 'b': 5, 'c': '6'}
Excelente tu aporte, Carlos. Muchas gracias por compartir. 😄
Buenísimo el articulo! , además sirve para aquellos que estén adentrándose en el mundo de Python como es mi caso!. Hermoso aporte Axel 👏
¡A darle con todo, Angela!
Cuentas con el apoyo de toda la comunidad. 💪
Python es un lenguaje hermoso, gracias por el artículo.
Totalmente, Iani. Es un lenguaje muy querido por la comunidad.
alguien sabe si puedo ejecutar un archivo python dentro de uno html como si fuera uno css o js