- ¿Qué es Python?
Python fue creado por Guido van Rossum en 1989 y lanzado por primera vez en 1991. Su diseño proiriza la legibilidad del código, permitiendo expresar conceptos complejos en pocas líneas. Es un lenguaje interpretado, dinámico y multiparadigma. La versión estable actual es Python 3.13.5 (a julio de 2025). Python 2 dejó de recibir soporte en 2020, por lo que todo desarrollo nuevo debe usar Python 3.
- Instalación en Windows
Descarga el instalador desde python.org. Asegúrate de marcar la opción "Add Python to PATH" durante la instalación. Verifica con estos comandos en la terminal:
C:\Users\Z.D
python --version # Python 3.13.5
pip --version # pip 23.x
Para desinstalar: ve a "Programas y características" en el Panel de control, busca "Python 3.13" y haz clic en "Desinstalar".
- Instalación en Linux (CentOS/RHEL)
# Instalar dependencias
yum install wget zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make zlib zlib-devel libffi-devel -y
# Descargar e instalar
wget https://www.python.org/ftp/python/3.13.5/Python-3.13.5.tgz
tar -xvf Python-3.13.5.tgz
cd Python-3.13.5
./configure --prefix=/usr/local/python313
make && make install
# Reemplazar la versión antigua
rm -rf /usr/bin/python
ln -s /usr/local/python313/bin/python3.13 /usr/bin/python
# Ajustar yum (si es necesario)
vi /usr/libexec/urlgrabber-ext-down # cambiar #!/usr/bin/python por #!/usr/bin/python2
vi /usr/bin/yum # misma modificación
Verificación:
[root@localhost ~]# python
Python 3.13.5 (main, Jul 29 2025, 22:31:27) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
- Gestor de paquetes pip
pip es el gestor de paquetes estándar de Python. Se puede usar para instalar, actualizar y eliminar bibliotecas de terceros.
| Comando | Descripción |
|---|---|
pip install requests |
Instalar última versión |
pip install pydantic==2.12.5 |
Instalar versión específica |
pip list |
Listar paquetes instalados |
pip freeze > requirements.txt |
Exportar dependencias |
pip install -r requirements.txt |
Instalar desde archivo |
Para acelerar las descargas, configura un espejo (mirror):
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
pip config set install.trusted-host mirrors.aliyun.com
- Conceptos fundamentales
5.1 Variables y literales
Una variable es un contenedor con nombre que almacena un valor. En Python no es necesario declarar el tipo de antemano.
# Literales
print(100) # entero
print(3.1416) # flotante
print(True) # booleano
print("Hola Python") # cadena
print(None) # valor nulo
# Variables (tipado dinámico)
x = 10 # entero
x = 3.14 # ahora es flotante
x = "texto" # ahora es cadena
x = True # ahora es booleano
# Asignación múltiple
a, b = 5, 20
# Intercambio de valores
a, b = b, a
print(a, b) # 20 5
5.2 Tipos de datos principales
| Tipo | Ejemplo | Descripción |
|---|---|---|
int |
10, -5, 0 |
Números enteros |
float |
3.14, 1.2e3 |
Números decimales |
str |
"hola", 'mundo' |
Cadena de caracteres |
bool |
True, False |
Valores lógicos |
list |
[1,2,3] |
Lista mutable y ordenada |
tuple |
(1,2,3) |
Tupla inmutable y ordenada |
set |
{1,2,3} |
Conjunto sin orden ni repetición |
dict |
{"clave": "valor"} |
Diccionario (pares clave-valor) |
Para conocer el tipo de una variable: type(variable).
5.3 Operadores
| Categoría | Operadores |
|---|---|
| Aritméticos | + - * / // % ** |
| Asignación | = += -= *= /= //= %= **= |
| Comparación | == != < > <= >= |
| Lógicos | and or not |
# Ejemplos
print(10 + 5) # 15
print(10 / 3) # 3.333...
print(10 // 3) # 3 (división entera)
print(10 % 3) # 1 (módulo)
print(2 ** 3) # 8 (potencia)
a = 10
a += 5 # a = 15
print(a, a == 15, a > 5 and a < 20) # 15 True True
5.4 Control de flujo
Condicionales if-elif-else
nota = 75
if nota >= 90:
print("Excelente")
elif nota >= 70:
print("Bien")
else:
print("Necesita mejorar")
Bucle while
contador = 0
while contador < 5:
print(contador)
contador += 1
Bucle for
for i in range(6):
print(i) # 0 1 2 3 4 5
palabra = "Python"
for letra in palabra:
print(letra)
break y continue
for num in range(1, 11):
if num == 5:
break # sale del bucle
print(num) # 1 2 3 4
for num in range(1, 11):
if num % 2 == 0:
continue # salta pares
print(num) # 1 3 5 7 9
- Estructuras de datos principales
6.1 Listas
frutas = ["manzana", "plátano", "cereza"]
print(frutas[0]) # manzana
frutas.append("naranja") # agrega al final
frutas.insert(1, "kiwi") # inserta en índice 1
frutas.remove("plátano") # elimina por valor
fruta_eliminada = frutas.pop() # elimina último y lo devuelve
print(frutas) # ['manzana', 'kiwi', 'cereza']
print(len(frutas)) # 3
# Comprensión de listas
cuadrados = [x**2 for x in range(1, 11)]
print(cuadrados) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
6.2 Tuplas
punto = (3, 4)
x, y = punto # desempaquetado
print(x, y) # 3 4
# punto[0] = 5 # error: las tuplas son inmutables
6.3 Conjuntos (set)
a = {1, 2, 3, 3}
print(a) # {1, 2, 3} (elimina duplicados)
a.add(4)
b = {3, 4, 5}
print(a & b) # {3, 4} intersección
print(a | b) # {1, 2, 3, 4, 5} unión
print(a - b) # {1, 2} diferencia
6.4 Diccionarios
persona = {"nombre": "Ana", "edad": 30, "ciudad": "Madrid"}
print(persona["nombre"]) # Ana
persona["profesion"] = "Ingeniera" # agregar
print(persona.get("edad")) # 30
persona["edad"] = 31 # modificar
del persona["ciudad"] # eliminar
print(persona.keys()) # dict_keys(['nombre', 'edad', 'profesion'])
print(persona.values()) # dict_values(['Ana', 31, 'Ingeniera'])
for clave, valor in persona.items():
print(f"{clave}: {valor}")
- Funciones
def saludar(nombre, saludo="Hola"):
"""Retorna un saludo personalizado."""
return f"{saludo}, {nombre}!"
# Llamadas
print(saludar("Carlos")) # Hola, Carlos!
print(saludar("María", "Buenos días")) # Buenos días, María!
# Argumentos variables
def sumar_todos(*numeros):
return sum(numeros)
print(sumar_todos(1, 2, 3, 4, 5)) # 15
# Argumentos clave variables
def mostrar_info(**datos):
for clave, valor in datos.items():
print(f"{clave}: {valor}")
mostrar_info(nombre="Luis", edad=25, pais="Chile")
# Función lambda
doble = lambda x: x * 2
print(doble(5)) # 10
# Ordenar lista con lambda
alumnos = [("Ana", 88), ("Luis", 95), ("Pedro", 72)]
alumnos.sort(key=lambda alumno: alumno[1])
print(alumnos) # [('Pedro', 72), ('Ana', 88), ('Luis', 95)]
- Módulos y paquetes
Un módulo es un archivo .py que contiene funciones, clases y variables. Un paquete es una carpeta con un archivo __init__.py.
# Importar un módulo completo
import math
print(math.sqrt(25)) # 5.0
# Importar con alias
import random as rnd
print(rnd.randint(1, 10))
# Importar solo una función
from datetime import datetime
ahora = datetime.now()
print(ahora)
# Crear un módulo personalizado (archivo "utilidades.py")
# def suma(a, b):
# return a + b
# En otro archivo:
# import utilidades
# print(utilidades.suma(3, 4))
- Programación orientada a objetos
class Perro:
# Variable de clase (compartida)
especie = "Canino"
def __init__(self, nombre, edad):
self.nombre = nombre # variable de instancia
self.edad = edad
def ladrar(self):
return f"{self.nombre} dice: ¡Guau!"
# Método especial para representación en cadena
def __str__(self):
return f"Perro(nombre={self.nombre}, edad={self.edad})"
# Crear objetos
perro1 = Perro("Rex", 3)
perro2 = Perro("Luna", 2)
print(perro1.ladrar()) # Rex dice: ¡Guau!
print(perro1.especie) # Canino
print(perro2) # Perro(nombre=Luna, edad=2)
# Herencia
class PerroGuia(Perro):
def __init__(self, nombre, edad, dueno):
super().__init__(nombre, edad)
self.dueno = dueno
def trabajar(self):
return f"{self.nombre} guía a {self.dueno}."
guia = PerroGuia("Max", 5, "Carlos")
print(guia.trabajar()) # Max guía a Carlos.
- Manejo de excepciones
def dividir(a, b):
try:
resultado = a / b
except ZeroDivisionError as e:
print(f"Error: {e}")
return None
except TypeError as e:
print(f"Error de tipo: {e}")
return None
else:
print("División exitosa")
return resultado
finally:
print("Bloque finally siempre se ejecuta")
print(dividir(10, 2)) # 5.0
print(dividir(10, 0)) # None (con mensaje de error)
- Archivos y JSON
import json
# Escribir JSON
datos = {"nombre": "Pedro", "edad": 28, "hobbies": ["leer", "correr"]}
with open("datos.json", "w", encoding="utf-8") as f:
json.dump(datos, f, ensure_ascii=False, indent=4)
# Leer JSON
with open("datos.json", "r", encoding="utf-8") as f:
datos_cargados = json.load(f)
print(datos_cargados["nombre"]) # Pedro
# Leer archivo de texto
with open("ejemplo.txt", "w") as f:
f.write("Hola mundo")
with open("ejemplo.txt", "r") as f:
contenido = f.read()
print(contenido) # Hola mundo
- Módulos estándar útiles
| Módulo | Función |
|---|---|
os |
Operaciones del sistema operativo (archivos, directorios) |
sys |
Interacción con el intérprete (argv, path, exit) |
collections |
Estructuras de datos avanzadas (defaultdict, Counter, deque) |
datetime |
Manejo de fechas y horas |
json |
Codificación y decodificación JSON |
logging |
Sistema de registro de logs |
re |
Expresiones regulares |
import os
print(os.getcwd()) # directorio actual
print(os.listdir('.')) # contenido del directorio
from collections import Counter
contador = Counter("paralelepipedo")
print(contador.most_common(3)) # [('p', 3), ('e', 3), ('l', 2)]