¿Estás aprendiendo Python y no tienes claros algunos conceptos? ¿Te pierdes con tantos símbolos similares pero que funcionan muy diferente como los paréntesis, corchetes y llaves? ¿Estás a punto de abandonar porque no te sale nada? ¡No lo hagas! Te clarifico en este post la diferencia entre estos tres símbolos y su uso, junto con sus semejanzas y matices, para que puedas ser el número 1 de Python.
En Python se usan los paréntesis ( y ) para crear tuplas, definir y llamar funciones e indicar el orden de evaluación de expresiones. Los corchetes [ y ], para crear listas y acceder a elementos de colecciones. Las llaves { y }, para crear diccionarios y formatear cadenas de texto.
Te cuento a continuación de manera más detallada el uso de cada uno de estos elementos para que te quede perfectamente claro cuándo y cómo se utiliza cada uno de ellos, sus diferencias y sus semejanzas.
Los paréntesis en Python: ( y )
Comenzamos con los paréntesis porque es el símbolo al que más uso vas a darle.
Los paréntesis en Python se utilizan para la creación de tuplas, que son colecciones no modificables de objetos. También se utilizan para la definición de funciones así como para su invocación. El último uso habitual es establecer el orden de evaluación dentro de una expresión.
Vamos paso a paso...
Creación de tuplas
Como ya he dicho, una tupla en Python es una colección no modificable de objetos. Su definición se hace mediante el uso de paréntesis. Por ejemplo, si quieres crear una tupla vacía puedes hacer lo siguiente:
tupla_vacia = ()
Si lo que quieres es definir una tupla con algunos elementos, la puedes inicializar de la siguiente manera. Recuerda que puedes combinar elementos de diferentes tipos:
tupla = (1, 2.5, 'casa')
Ten en cuenta que no puedes modificar una tupla, es decir, no puedes eliminar o añadir elementos. Lo que sí se puede hacer es modificar un objeto que haya dentro de una tupla si este es modificable.
Para acceder a los elementos de una tupla, aunque la hayamos definido con paréntesis, deben usarse los corchetes. Te lo explico más adelante.
Definición e invocación de funciones
El uso más habitual de los paréntesis, tanto en Python como en muchos lenguajes de programación, es la definición e invocación de funciones. Para definir una función, tenga esta parámetros o no, siempre es necesario indicar los paréntesis. Usaremos la palabra reservada def
que indica la definición de una función y a continuación el nombre de los parámetros entre paréntesis. Si no tiene parámetros, se colocan los paréntesis vacíos:
def funcion_sin_parametros():
print('Saludos desde codigopiton.com!')
def suma(sumando1, sumando2):
return sumando1 + sumando2
Para invocar a las funciones también es necesario indicar los paréntesis, tengan o no parámetros, de la siguiente manera:
funcion_sin_parametros()
valor = suma(12, 13)
print('El resultado de la suma es ' + str(valor))
La ejecución del código anterior generará el siguiente resultado por pantalla:
Saludos desde codigopiton.com!
El resultado de la suma es 25
Orden de evaluación de una expresión
Al igual que sucede en matemáticas, a veces es necesario agrupar operaciones de alguna manera para poder evaluar de manera correcta una expresión. Así, y por ejemplo, si quiero sumar 2 y 3 y multiplicar el resultado por 5 no puedo hacer lo siguiente: 2 + 3 * 5
, por que la operación de multiplicación tiene mayor prioridad y por tanto se ejecutará antes, obteniendo el resultado de 17, que no es lo que queremos.
Utilizando los paréntesis puedes, por tanto, indicar que la operación de suma tenga prioridad sobre la de multiplicación de la siguiente manera:
valor = (2 + 3) * 5
print('El valor calculado es ' + str(valor))
Este código dará como resultado con exactitud lo que queremos obtener:
Te envío todos los días un consejo para que cada día seas mejor en Python.
Siempre sobre Python y programación.
Más de 2500 personas como tú los reciben cada día.
Día que estás fuera, consejo sobre Python que te pierdes.
Antes de suscribirte consulta aquí la
Finalidad de recogida y tratamiento de datos personales: enviarte boletín informativo de Python y comunicaciones comerciales.
Legitimación: tu consentimiento.
Destinatarios: no se ceden a terceros. Los datos se almacenan en los servidores de marketing (GetResponse).
Derechos: podrás ejercer tus derechos de acceso, rectificación, limitación y supresión de datos en info @ codigopiton.com así como presentar una reclamación ante una autoridad de control.
Más información: política de privacidad, encontrarás información adicional sobre la recopilación y el uso de tu información personal.
El valor calculado es 25
Las llaves en Python: { y }
Las llaves en Python se utilizan para definir diccionarios y para formatear cadenas de texto incluyendo valores de variables o expresiones.
Creación de diccionarios
Un diccionario es una colección en la que se guardan elementos identificados por una clave única. Se pueden utilizar esas claves para recuperar de manera cómoda y rápida los elementos asociados a ellas.
Puedes crear un diccionario vacío de la siguiente manera por medio del uso de llaves:
diccionario_vacio = {}
Si necesitas definir un diccionario con algunos valores incluidos puedes hacerlo siguiendo el siguiente ejemplo:
diccionario = {1: 'coche', 2: 'barco', 3: 'avión'}
Una vez creado un diccionario puedes acceder a sus elementos y añadir nuevos valores utilizando la notación de corchetes. Te lo explico un poco más adelante.
Formatear cadenas de texto con valores de variables o expresiones
En Python existen multitud de maneras de formatear una cadena de texto. Cuando queremos incluir en una cadena un valor almacenado en una variable o el resultado de una expresión podemos usar una de estas dos alternativas que implican el uso de llaves: la función format
o los llamados f-strings.
Para formatear una cadena de texto con valores de variables utilizando esta primera opción, basta con definir los lugares en los que irán ubicados dichos valores dentro de la cadena, los llamados placeholders. Estos se indican colocando unas llaves en el sitio que nos interesa dentro de un texto. A continuación se llama a la función format
de dicho texto pasándole los parámetros que nos interesa insertar en cada uno de sus placeholders. Se comprende mejor con un ejemplo:
valor1 = 12
valor2 = 13
cadena = 'El resultado de sumar {} y {} es {}.'.format(valor1, valor2, valor1+valor2)
print(cadena)
El resultado del código anterior es el siguiente, donde se aprecia que valor1
se sustituye por el primer par de llaves en el texto, valor2
por el segundo par de llaves y valor1 + valor2
por el tercer par:
El resultado de sumar 12 y 13 es 25.
Puedes indicar parámetros dentro de las llaves para formatear de manera precisa y pormenorizada cada uno de los valores, aunque esto se escapa un poco del tema de este post. Si necesitas más información sobre esto puedes consultarlo en este artículo sobre el formato de cadenas de texto.
La segunda opción es preferida por su comodidad y velocidad. No necesitas una función adicional y permite ver fácilmente qué valor será sustituido en cada placeholder, pues en estos se indica directamente el nombre de una variable o una expresión. Eso sí, es necesario anteponer a la cadena el carácter f
. Lo puedes hacer de la siguiente manera:
valor1 = 12
valor2 = 13
cadena = f'El resultado de sumar {valor1} y {valor2} es {valor1 + valor2}.'
¡Cuidado! Los f-strings solo están disponibles desde la versión 3.6 de Python. Solo su comodidad es un buen pretexto para actualizarte si tienes una versión anterior.
Los corchetes en Python: [ y ]
Los corchetes en Python se utilizan para la definición de listas, para el acceso de lectura a los elementos de tuplas, listas, diccionarios y strings y para el acceso de escritura a listas y diccionarios.
Creación de listas
La creación de listas se hace de manera muy similar a la de tuplas que ya te he explicado, pero utilizando los corchetes en lugar de los paréntesis. De esta manera, te muestro como crear un par de listas, una vacía y la otra con algún elemento:
lista_vacia = []
lista = [1, 2, 3]
Al contrario que las tuplas, las listas sí permiten añadir nuevos elementos, o borrar y sustituir los existentes.
Otra manera de crear listas en Python es mediante la utilización de list comprehension o comprensión de listas. Se basa en la utilización de un bucle que permite obtener una expresión en cada vuelta del bucle (for
) y añadir todas los valores generados a una lista que pasen determinado filtro (if
). Toda la expresión de generación de la lista debe encerrarse entre corchetes. Por ejemplo, si quiero generar todos las números pares entre 0 y 100 pero eliminando aquellos que sean múltiplos de 5 puedo hacer lo siguiente:
pares = [valor * 2 for valor in range(0, 50) if valor * 2 % 5]
La explicación pormenorizada de la compresión de listas se escapa un poco al alcance de este post, pero si te interesa consulta esta traducción de la documentación oficial de Python.
Acceso a elementos de listas, tuplas, diccionarios y strings
Los corchetes también se utilizan para el acceso a los elementos de listas, tuplas y diccionarios. El acceso de lectura se hace igual en los tres tipos de colecciones pero con un matiz. Los índices utilizados para el acceso a los elementos de listas y tuplas deben ser números enteros (entre 0 y el número de elementos de la colección menos uno) mientras que para el acceso a diccionarios el valor de las claves puede ser de cualquier tipo. Fíjate en el siguiente ejemplo cómo las claves de los valores del diccionario son de tipo texto:
tupla = (1, 2, 3)
lista = [4, 5, 6]
diccionario = {'a':10, 'b':20, 'c':30}
valor_tupla = tupla[1]
valor_lista = lista[0]
valor_dicc = diccionario['b']
print(f'Los valores son {valor_tupla}, {valor_lista} y {valor_dicc}.')
La ejecución de este código dará como resultado la siguiente salida por pantalla:
Los valores son 2, 4 y 20.
También se puede acceder a una porción concreta de una lista o una tupla utilizando la notación de porciones. En esta notación se indican entre los corchetes la posición del elemento de inicio y la posición del elemento de fin (excluida esta) que queremos obtener separada por dos puntos. Por ejemplo, si necesitamos todos los elementos entre las posiciones 2 y 5 podríamos hacer lista[2:5]
. Ejemplo:
15 conceptos fundamentales que necesitas conocer para aprender y dominar Python
Te voy a hacer cuatro regalos (no uno, no dos, no tres, cuatro) que hablan de estos 15 conceptos fundamentales de Python: mi Tutorial Básico Interactivo de Python, una cheat sheet de Python en español: La Hoja de Referencia de Python, una guía de ChatGPT y Python y 30 ejercicios de Python (es un reto para ti).
Estos regalos son exclusivos para los suscriptores de Código Pitón.
lista = [2, 3, 5, 7, 11, 13, 17]
print(lista[2:5])
El resultado del código anterior será:
[5, 7, 11]
Como los strings o cadenas de texto se manejan en parte como si se tratara de tuplas, también se puede acceder a sus caracteres individualmente de la misma manera. Es posible, además, usar la notación de porciones para acceder a una subcadena de texto. Es decir, los corchetes también se pueden usar para hacer substring en Python.
Para el acceso de escritura también se utilizan los corchetes, pero esta vez al lado izquierdo en una asignación. En las tuplas no se puede escribir, pero sí en las listas y los diccionarios. En las listas debe existir la posición a escribir pero en los diccionarios no, por lo tanto, una asignación en un diccionario de un elemento que no existe da lugar la inserción de un elemento:
tupla = (1, 2, 3)
lista = [4, 5, 6]
diccionario = {'a':10, 'b':20, 'c':30}
#la siguiente instrucción generará un error por escritura de tupla
#error generado: TypeError: 'tuple' object does not support item assignment
tupla[1] = 10
#la siguiente instrucción generará un error por escritura de elemento inexistente
#error generado: IndexError: list assignment index out of range
lista[10] = 20
#las siguientes escrituras son correctas
lista[2] = 30
diccionario['b'] = 40 #modificación del elemento 'b'
diccionario['j'] = 120 #inserción del elemento 'j'
De la misma manera que se pueden hacer escrituras para modificar un elemento de una lista y para modificar o insertar un elemento de un diccionario, también podemos usar la misma notación con corchetes para eliminar un elemento de una lista o un diccionario con la declaración del
. Te lo muestro con un ejemplo:
lista = [1, 2, 3]
diccionario = {'a':1, 'b':20, 'c':30}
del lista[1]
del diccionario['c']
print(lista)
print(diccionario)
Este código muestra por pantalla lo siguiente:
[1, 3]
{'a': 1, 'b': 20}
Cuándo usar tuplas (con paréntesis) y cuándo usar listas (con corchetes)
Ahora que ya sabes cuándo y cómo se usa cada uno de los elementos explicados en este artículo, tal vez te quede la duda de cuándo usar una tupla y cuando lista.
La principal diferencia entre una tupla y una lista en Python es que las tuplas no son modificables y las listas sí. Además, por su implementación, el manejo de tuplas es más eficiente que el de listas.
Así que lo tienes muy claro:
- Si necesitas una colección para añadir o eliminar elementos debes utilizar una lista.
- Si no necesitas añadir o eliminar elementos puedes utilizar una lista o una tupla, ya que, una vez definidas, su uso es similar.
- Si no necesitas añadir o eliminar elementos y necesitas más eficiencia, tanto espacial como temporal, debes usar una tupla.
Tabla de resumen con las diferencias de uso de paréntesis, corchetes y llaves en Python
Símb. | Uso | Ejemplo |
() | Crear tuplas | tupla = (1, 2, 3) |
() | Definir funciones | def suma(s1, s2): |
() | Invocar funciones | v = suma(3, 5) |
() | Establecer orden de evaluación | v = (2 + 3) * 5 |
{} | Crear diccionarios | dicc = {'a': 10, 'b': 20, 'c': 30} |
{} | Formatear cadenas de texto | valor = 10 texto = 'el valor es {}'.format(valor) texto = f'el valor es {valor}' |
[] | Crear listas | lista = [1, 2, 3] |
[] | Acceder a un valor de una lista, una tupla o un string | valor1 = tupla[1] caracter = texto[5] |
[] | Acceder a una porción de una lista, una tupla o un string | subtupla = tupla[1:3] subcadena = texto[4:9] |
[] | Modificar un elemento existente una lista | lista[1] = 10 |
[] | Acceder a un elemento de un diccionario | dicc = {'a': 10, 'b': 20} |
[] | Modificar elemento existente o añadir nuevo a un diccionario | dicc['d'] = 40 |
Espero que este artículo te haya aclarado unos cuantos conceptos en este camino del aprendizaje de Python. Y para que sea lo más llevadero posible echa un ojo a las cosas que necesitas para aprender Python.
Te envío todos los días un consejo para que cada día seas mejor en Python.
Siempre sobre Python y programación.
Más de 2500 personas como tú los reciben cada día.
Día que estás fuera, consejo sobre Python que te pierdes.
Antes de suscribirte consulta aquí la
Finalidad de recogida y tratamiento de datos personales: enviarte boletín informativo de Python y comunicaciones comerciales.
Legitimación: tu consentimiento.
Destinatarios: no se ceden a terceros. Los datos se almacenan en los servidores de marketing (GetResponse).
Derechos: podrás ejercer tus derechos de acceso, rectificación, limitación y supresión de datos en info @ codigopiton.com así como presentar una reclamación ante una autoridad de control.
Más información: política de privacidad, encontrarás información adicional sobre la recopilación y el uso de tu información personal.