Python
Repaso de sintaxis: (), {}, [] y :
Todos los significados de los paréntesis, las llaves, los corchetes y los dos puntos en Python, reunidos en un solo lugar.
Esta página no enseña nada nuevo. Todo lo que aparece aquí ya lo viste en las páginas anteriores, explicado en el momento en que hacía falta. Lo que hace esta página es juntarlo.
El motivo es simple: Python reutiliza los mismos cuatro símbolos —(), {}, [] y :— para cosas muy distintas, y decidió que el contexto determine el significado. Eso hace el lenguaje más corto de escribir, pero deja al lector con la tarea de reconocer cuál de los usos está viendo. Cuando esos usos se aprenden salteados, a lo largo de siete páginas, cuesta ver el patrón. Reunidos, se ven de un vistazo.
Úsala como referencia: cada fila enlaza a la página donde ese uso se explica en detalle.
Los paréntesis ()
| Uso | Se ve así | Explicado en |
|---|---|---|
| Llamar a una función o un método | print("Hola") | Qué es una función |
| Declarar los parámetros al definirla | def saludar(nombre): | Qué es una función |
| Crear una instancia de una clase | Persona("Ana", 30) | Tu primera clase |
| Agrupar una expresión aritmética | (a + b) / 2 | Operadores aritméticos |
| Crear una tupla (por claridad) | punto = (3, 4) | Tuplas: valores que no cambian |
Los dos primeros usos son las dos caras de lo mismo: en la definición, los paréntesis encierran los nombres que la función espera; en la llamada, los valores concretos que le entregas. Crear una instancia se escribe igual que llamar a una función porque, en el fondo, es una llamada: la que ejecuta el constructor.
def promedio(a, b): # declarar parámetros
return (a + b) / 2 # agrupar una operación
punto = (3, 4) # crear una tupla
x, y = punto
print(promedio(x, y)) # llamar a dos funcionesGuárdalo como parentesis.py y ejecútalo:
python parentesis.py3.5
El último uso de la tabla tiene truco, y ya se advirtió al presentar las tuplas: lo que crea una tupla es la coma, no el paréntesis. 3, 4 sin paréntesis ya es una tupla, y (5) con paréntesis pero sin coma es solo el número 5. Los paréntesis se escriben porque hacen el código más claro, no porque el lenguaje los exija.
Un paréntesis de más o de menos cambia el significado sin dar error. numeros.sort sin paréntesis no llama a nada: se refiere al método y el programa sigue como si nada. Y promedio(2, 3) * 2 no es lo mismo que promedio(2, 3 * 2). Cuando un resultado sea inexplicable, cuenta los paréntesis antes que ninguna otra cosa.
Las llaves {}
| Uso | Se ve así | Explicado en |
|---|---|---|
Crear un diccionario, con clave: valor | {"nombre": "Ana", "edad": 30} | Diccionarios |
| Crear un conjunto, solo con valores | {1, 2, 3} | Conjuntos |
Aquí lo que decide el significado es lo que hay adentro: si los elementos vienen en pares separados por dos puntos, es un diccionario; si son valores sueltos separados por comas, es un conjunto.
diccionario = {"nombre": "Ana", "edad": 30}
conjunto = {"nombre", "edad"}
vacio = {}
print(type(diccionario))
print(type(conjunto))
print(type(vacio))
print(type(set()))Guárdalo como llaves.py y ejecútalo:
python llaves.py<class 'dict'>
<class 'set'>
<class 'dict'>
<class 'set'>
Repetimos la trampa porque merece repetirse: {} vacío es un diccionario vacío, no un conjunto vacío. El conjunto vacío solo se puede escribir set(), y no hay alternativa. Es una herencia histórica: los diccionarios llegaron primero al lenguaje y se quedaron con las llaves vacías. El detalle completo está en El conjunto vacío se escribe set().
Si vienes de C++, Java o JavaScript, fíjate en lo que no está en esta tabla: en Python las llaves nunca delimitan un bloque de código. Esa función la cumple la indentación, y es la primera diferencia que salta a la vista al leer código Python.
Los corchetes []
| Uso | Se ve así | Explicado en |
|---|---|---|
| Crear una lista | [10, 20, 30] | Qué es una lista |
| Indexar una lista o una cadena | numeros[0] | Acceder por posición: el índice |
Cortar con slicing (usando : adentro) | numeros[1:3] | Slicing |
| Leer un diccionario por su clave | persona["nombre"] | Leer un valor: corchetes o .get() |
Hay una asimetría útil para leerlos: unos corchetes al principio de una expresión crean una lista; unos corchetes pegados a un valor que ya existe acceden a algo dentro de él. [0] a secas es una lista de un elemento; numeros[0] es el primer elemento de numeros.
numeros = [10, 20, 30, 40] # crear una lista
persona = {"nombre": "Ana"}
print(numeros[0]) # indexar una lista
print(persona["nombre"]) # leer un diccionario por su clave
print(numeros[1:3]) # slicing
print("Python"[0:3]) # indexar y cortar también sirve en cadenasGuárdalo como corchetes.py y ejecútalo:
python corchetes.py10
Ana
[20, 30]
PytLos corchetes de indexado y los de clave se escriben igual, y esa semejanza es intencional: en ambos casos estás diciendo “dame lo que está guardado bajo esta etiqueta”. Lo único que cambia es la etiqueta: un número de posición en una lista, una clave cualquiera en un diccionario.
Los dos puntos :
| Uso | Se ve así | Explicado en |
|---|---|---|
| Abrir un bloque indentado | if edad >= 18: | Indentación en vez de llaves y La indentación, ahora en la práctica |
Separar las partes de un slice, dentro de [] | numeros[1:3] | Slicing |
| Separar clave y valor en un diccionario | {"nombre": "Ana"} | Diccionarios |
El primer uso es el más frecuente y aparece en todas las estructuras que abren un cuerpo indentado: if, elif y else, for, while, def y class. En todos ellos la regla es la misma: la línea que abre el bloque termina en : y lo que pertenece a ese bloque va indentado debajo.
persona = {"nombre": "Ana", "edad": 30} # separa clave de valor
letras = persona["nombre"][0:2] # slicing
if len(letras) == 2: # abre un bloque indentado
print(letras)Guárdalo como dos_puntos.py y ejecútalo:
python dos_puntos.pyAnEn otros lenguajes cada una de estas tres tareas usaría un símbolo distinto, o directamente no existiría. Python usa el mismo carácter para las tres, y lo que determina cuál es su contexto: dentro de unos corchetes es un slice; entre una clave y un valor dentro de unas llaves es un separador; al final de una cabecera es el inicio de un bloque. El intérprete nunca se confunde, porque las tres situaciones son inconfundibles para él. Quien puede confundirse es el lector que lee rápido, y por eso vale la pena tener presente la lista.
Cierre de la sección
Este repaso cierra la parte básica de Python. Si miras hacia atrás, las siete páginas anteriores se resumen en pocas ideas: los datos se guardan en variables con un tipo que el intérprete deduce solo; el programa decide y repite con if, for y while; el código se organiza en funciones y, cuando datos y comportamiento van juntos, en clases; y los datos en cantidad viven en cuatro colecciones: listas, tuplas, diccionarios y conjuntos.
Con eso ya puedes leer y escribir programas de Python completos. Lo que falta a partir de aquí —manejo de errores, archivos, módulos y librerías externas— se apoya entero en estas mismas piezas, así que la mejor forma de prepararse es usarlas: toma el ejemplo de la cuenta bancaria y amplíalo con un menú interactivo como el de break y continue, guardando varias cuentas en un diccionario. Ese único ejercicio toca absolutamente todo lo de esta sección.
Y después, las librerías
Las dos páginas que siguen ya no son sobre el lenguaje sino sobre lo que se construyó encima de él, y son la puerta de entrada al Python que se usa para analizar datos:
- NumPy: arrays numéricos — operar sobre miles de números sin escribir un solo bucle.
- Matplotlib: graficar con pyplot — convertir esos números en gráficos que se entienden de un vistazo.