Introducción a Python
Python es un lenguaje de programación de alto nivel, interpretado y multiparadigma. Es conocido por su legibilidad y se usa en diversas aplicaciones, como Instagram, Netflix, y Spotify. Soporta orientación a objetos, programación imperativa y funcional.
Historia: Guido van Rossum creó Python en los años 80 como sucesor del lenguaje ABC, y lo lanzó en 1991. El nombre "Python" proviene de la afición de Van Rossum por Monty Python. Van Rossum fue el Benevolente Dictador Vitalicio hasta 2018 y sigue siendo influyente en la comunidad.
Desarrollo: Python ha evolucionado desde su versión inicial (0.9.0), añadiendo características como clases, manejo de excepciones, y herramientas avanzadas en versiones 2.x como listas por comprensión y recolección de basura. La Python Software Foundation License asegura la compatibilidad con la GNU GPL.
Filosofía de Python
- Belleza y Simplicidad**: "Bello es mejor que feo", "Simple es mejor que complejo".
- Legibilidad**: "La legibilidad cuenta".
- Claridad**: "Debería haber una —y preferiblemente solo una— manera obvia de hacerlo".
Tipos de Datos y Estructuras
Tipos de Datos Básicos:
- Cadena (
str
): Inmutable, ej.'Texto'
. - Bytes (
bytes
): Inmutable, ej.b'Texto'
. - Lista (
list
): Mutable, ej.[1, 'Texto', True]
. - Tupla (
tuple
): Inmutable, ej.(1, 'Texto', True)
. - Conjunto (
set
): Mutable y sin orden, ej.{1, 'Texto'}
. - Conjunto Inmutable (
frozenset
): Inmutable, ej.frozenset([1, 'Texto'])
. - Diccionario (
dict
): Pairs clave-valor, ej.{'clave': 'valor'}
. - Entero (
int
): Precisión arbitraria, ej.42
. - Flotante (
float
): Número decimal, ej.3.14
. - Complejo (
complex
): Parte real e imaginaria, ej.1 + 2j
. - Booleano (
bool
):True
oFalse
.
- Cadena (
Estructuras de Control:
Condicionales: Utilizan
if
,elif
, yelse
para ejecutar bloques de código basados en condiciones.if verdadero: print("Verdadero") else: print("Falso")
lenguaje = "Python" if lenguaje == "C": print("Lenguaje de programación: C") elif lenguaje == "Python": print("Lenguaje de programación: Python") else: print("Lenguaje de programación: indefinido")
Bucle
for
: Itera sobre un iterable.lista = ["a", "b", "c"] for i in lista: print(i) # Imprime cada elemento de la lista
Bucle
while
: Ejecuta mientras la condición sea verdadera.numero = 0 while numero < 10: print(numero, end=" ") numero += 1 # Incrementa el valor de 'numero'
Estructuras de Datos
Listas y Tuplas:
Listas (
list
): Mutables, definidas con[]
.lista = ["abc", 42, 3.1415] lista.append(True) # Añade un elemento lista[0] = "xyz" # Modifica un elemento
Tuplas (
tuple
): Inmutables, definidas con()
.tupla = ("abc", 42, 3.1415)
tupla[0] = "xyz" # Provoca una excepción
Diccionarios (
dict
): Estructuras mutables que almacenan pares clave-valor.diccionario = {"cadena": "abc", "numero": 42} diccionario["cadena"] = "xyz" # Modifica el valor
Conjuntos (
set
): Colecciones de elementos únicos sin orden.conjunto1 = set(["a", "b"]) conjunto2 = set(["b", "c"]) conjunto1 & conjunto2 # Intersección: {'b'}
Funciones y Estructuras Avanzadas
Funciones:
Definidas con
def
, pueden tener parámetros opcionales.def suma(x, y=2): return x + y def suma_varios(*args): return sum(args)
Expresiones Lambda: Funciones anónimas en una línea.
suma = lambda x, y=2: x + y
Listas por Comprensión: Creación compacta de listas.
[i * i for i in range(5)] # Resultado: [0, 1, 4, 9, 16]
Clases:
Definidas con
class
, incluyen métodos y atributos.class Persona: def init(self, nombre, edad): self.nombre = nombre self.edad = edad def mostrar_edad(self): print(self.edad) p = Persona('Alicia', 20) p.mostrar_edad() # Imprime: 20
Sentencia
match-case
: Para coincidencia de patrones, disponible desde Python 3.10.match coordenada: case Punto(x=10, y=40): print("Coordenada 10, 40") case Punto(): print("Es un punto") case _: print("No es un punto")
Optimización con Diccionarios en Funciones
Usar un diccionario para seleccionar una función basada en una clave, en lugar de múltiples
if-elif
.def calculo(op, a, b): return { 'sum': lambda: a + b, 'rest': lambda: a - b, 'mult': lambda: a * b, 'div': lambda: a / b }.get(op, lambda: None)()