0% encontró este documento útil (0 votos)
10 vistas

Python Puro.

Este documento explica conceptos básicos de Python como sintaxis, variables, tipos de datos, condicionales, funciones y estructuras de datos. Cubre temas como indentación, comentarios, operadores, conversiones de tipos, excepciones, funciones integradas, listas, tuplas, conjuntos y diccionarios.

Cargado por

manrec797
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
10 vistas

Python Puro.

Este documento explica conceptos básicos de Python como sintaxis, variables, tipos de datos, condicionales, funciones y estructuras de datos. Cubre temas como indentación, comentarios, operadores, conversiones de tipos, excepciones, funciones integradas, listas, tuplas, conjuntos y diccionarios.

Cargado por

manrec797
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 54

Aprende lo básico

● Sintaxis básica
● Variables y tipos de datos
● Condicionales
● Tipo de conversión, excepciones
● Funciones, funciones integradas
● Lista, tuplas, conjuntos, diccionarios

Sintaxis básica de python:

- La sintaxis básica de Python incluye la estructura general del lenguaje, que se


utiliza para escribir programas. Aquí hay algunos conceptos fundamentales
que debes conocer:

- 1. Indentación: en Python, el nivel de indentación es muy importante ya que


se utiliza para delimitar bloques de código. La mayoría de los lenguajes de
programación utilizan llaves ({ }) para esto, pero en Python, las declaraciones
de bloque comienzan con un nivel de indentación y terminan cuando la
indentación vuelve al nivel anterior.

Por ejemplo, en lugar de:

En Python, escribirías:
2. Comentarios: los comentarios son textos que no se ejecuta y se utilizan
para explicar el código o para deshabilitar temporalmente una parte del
mismo. En Python, se pueden crear comentarios con el signo numeral (#).

Por ejemplo:

3. Variables: En Python, no es necesario declarar el tipo de una variable antes


de utilizarla. Simplemente asignas un valor a una variable y Python se encarga
del tipo de datos.

Por ejemplo:

4. Operadores: Python incluye una variedad de operadores para realizar


cálculos y comparaciones, incluyendo operadores aritméticos (+, -, *, /),
operadores de comparación (>, <, ==, !=), y operadores lógicos (and, or, not).

Por ejemplo:
Variables y tipos de datos:

Variables:

● Una variable es un nombre que se utiliza para referirse a un valor


almacenado en la memoria del ordenador. En Python, no es necesario
declarar el tipo de variable antes de utilizarla. Simplemente asignas un
valor a una variable y Python se encarga del tipo de datos.

● Para crear una variable en Python, solo necesitas asignarle un valor


utilizando el operador de asignación (=). El nombre de la variable puede
ser cualquier combinación de letras, números y guiones bajos, pero no
puede comenzar con un número

● Por convención, en Python se utiliza la convención snake_case para


nombrar las variables, es decir, se utiliza una combinación de letras
minúsculas y guiones bajos para separar las palabras.
Por ejemplo: mi_variable, nombre_completo, edad_usuario.

Tipos de datos:

● Python tiene varios tipos de datos incorporados que se utilizan para


representar diferentes tipos de información. Algunos de los tipos de
datos más comunes son:

1. Enteros (int): representan números enteros, como -3, 0 y 42.


2. Flotantes (float): representan números decimales, como 3.14 y 0.5
3. Cadenas de caracteres (str): representan texto, como "Hola, mundo!"
4. Booleanos (bool): representan valores verdadero o falso, True o False

● Para conocer el tipo de dato de una variable en Python, se puede


utilizar la función type().

Por ejemplo:
Condicionales:

En Python, los condicionales se utilizan para tomar decisiones en función de


ciertas condiciones. Aquí te explico cómo funcionan:

● IF:

El condicional if se utiliza para ejecutar un bloque de código si se cumple


una determinada condición. La sintaxis es la siguiente:

Por ejemplo:
● ELSE:

El condicional else se utiliza para ejecutar un bloque de código si no se


cumple la condición del if anterior. La sintaxis es la siguiente:

Por ejemplo:

● ELIF:

El condicional elif se utiliza para evaluar múltiples condiciones. Si la primera


condición no se cumple, se evalúa la siguiente, y así sucesivamente. La
sintaxis es la siguiente:
Por ejemplo:

● OPERADORES LÓGICOS:

Los operadores lógicos se utilizan para combinar o invertir condiciones en


los condicionales. Los operadores lógicos más comunes son:

● and: evalúa como verdadero si ambas condiciones son verdaderas.


● or: evalúa como verdadero si al menos una de las condiciones es
verdadera.
● not: invierte el valor de verdad de una condición

Por ejemplo:
● CONVERSIONES Y EXCEPCIONES:

En Python, las conversiones de tipo y las excepciones son herramientas


importantes para manejar errores y transformar datos de un tipo a otro. Aquí
te explico un poco más sobre ellos:

● Conversión de tipos:
En Python, se pueden convertir los datos de un tipo a otro utilizando
funciones incorporadas en el lenguaje. Algunas de las funciones de
conversión de tipo más comunes son:

● int(): convierte un valor a un número entero


● float(): convierte un valor a un número decimal
● str(): convierte un valor a una cadena de caracteres
● bool(): convierte un valor a un valor booleano

Por ejemplo:
● Excepciones:

Las excepciones son errores que ocurren durante la ejecución de un programa


y que pueden ser manejados para evitar que el programa se detenga. En
Python, se utilizan bloques try/except para manejar las excepciones. El bloque
try contiene el código que puede generar una excepción, mientras que el
bloque except contiene el código que se ejecuta en caso de que se genere la
excepción.

Por ejemplo:

En este ejemplo, se intenta convertir la cadena "Hola" a un número entero, lo cual


genera una excepción de tipo ValueError. El bloque except captura esta
excepción y muestra un mensaje de error.
Funciones, funciones integradas:

En Python, las funciones son bloques de código reutilizables que realizan una
tarea específica. Las funciones se definen mediante la palabra clave "def"
seguida del nombre de la función y los parámetros que recibe, si los tiene. Aquí
te explico cómo funcionan:

En este ejemplo, se define una función llamada "mi_funcion" que recibe dos
parámetros, "parametro_1" y "parametro_2". La función realiza una tarea (en este
caso, suma los dos parámetros) y devuelve el resultado mediante la palabra
clave "return"

Para llamar a una función, simplemente se escribe el nombre de la función


seguido de los argumentos que se le pasan, si los tiene:

En Python también existen muchas funciones integradas en el lenguaje que se


pueden utilizar sin necesidad de definirlas. Algunas de las funciones integradas
más comunes son:

● print(): muestra un mensaje por pantalla


● input(): solicita al usuario que ingrese un valor por teclado
● len(): devuelve la longitud de un objeto (cadena de caracteres, lista, etc.)
● range(): genera una secuencia de números enteros
● str(): convierte un valor a una cadena de caracteres
● int(): convierte un valor a un número entero
● float(): convierte un valor a un número decimal
Por ejemplo:

En este ejemplo, se utiliza la función "input" para solicitar al usuario que ingrese
su nombre por teclado, la función "print" para mostrar un mensaje por pantalla, la
función "len" para obtener la longitud de una lista, la función "range" para generar
una secuencia de números enteros, y las funciones "str" e "int" para convertir
valores de un tipo a otro.

Lista, tuplas, conjuntos, diccionarios:

En Python, hay varios tipos de estructuras de datos que se utilizan para


almacenar y organizar información. Aquí te explico cómo funcionan las listas, las
tuplas, los conjuntos y los diccionarios:

● Listas:
Las listas son una colección ordenada de elementos que se pueden modificar.
Se definen utilizando corchetes [] y separando los elementos con comas. Los
elementos pueden ser de cualquier tipo de dato, incluyendo otras listas.

Para acceder a los elementos de una lista, se utiliza su índice (posición) dentro
de la lista. Los índices empiezan en 0 para el primer elemento.
● Tuplas:

Las tuplas son similares a las listas, pero son inmutables, lo que significa que
una vez creadas no se pueden modificar. Se definen utilizando paréntesis () y
separando los elementos con comas.

Para acceder a los elementos de una tupla, se utiliza el mismo método que para
las listas: su índice.

● Conjuntos:

Los conjuntos son una colección no ordenada de elementos únicos. Se


definen utilizando llaves {} o la función set().
Para acceder a los elementos de un conjunto, se utilizan métodos específicos,
como add() para agregar elementos o remove() para eliminar elementos.

● Diccionarios:
Los diccionarios son una colección de pares clave-valor, donde cada clave se
asocia con un valor. Se definen utilizando llaves {} y separando los pares
clave-valor con comas y dos puntos (:).

Para acceder a los valores de un diccionario, se utiliza su clave.

También se pueden agregar, modificar o eliminar elementos de un diccionario


utilizando métodos específicos, como update() para agregar o modificar pares
clave-valor, o pop() para eliminar un elemento por su clave.
Estructuras de datos y algoritmos

● Matrices y listas enlazadas


● Heaps, stacks and queues
● tablas hash
● Árboles de búsqueda binaria
● recursividad
● Algoritmos de clasificación

Matrices y listas enlazadas:

En Python, se pueden crear matrices (o arreglos) utilizando listas anidadas, es


decir, una lista que contiene otras listas. Cada lista interna representa una fila de
la matriz y contiene los elementos correspondientes a esa fila. Por ejemplo, para
crear una matriz de 2x3:

Para acceder a los elementos de una matriz, se utilizan dos índices: el primero
para indicar la fila y el segundo para indicar la columna.

Para recorrer todos los elementos de una matriz, se pueden utilizar dos bucles
anidados
Las listas enlazadas son una estructura de datos más compleja, que se utiliza
para representar datos que están interconectados de manera no lineal. Cada
elemento de la lista enlazada se llama nodo, y contiene un valor y un puntero al
siguiente nodo de la lista. El último nodo de la lista apunta a None (o Null),
indicando el final de la lista.

En Python, se puede crear una lista enlazada utilizando clases y objetos. Por
ejemplo, para crear una lista enlazada de tres nodos:

En este ejemplo, se definió la clase Nodo, que tiene dos atributos: valor (que
contiene el valor del nodo) y siguiente (que apunta al siguiente nodo de la lista).
Luego se crearon tres nodos y se conectaron entre sí mediante los punteros
"siguiente".

Para recorrer una lista enlazada, se puede utilizar un bucle mientras el puntero
"siguiente" no sea None.
En este ejemplo, se define una variable "nodo_actual" que se inicializa con el
primer nodo de la lista. Luego, se utiliza un bucle para recorrer los nodos de la
lista mientras "nodo_actual" no sea None. En cada iteración del bucle, se
imprime el valor del nodo actual y se actualiza la variable "nodo_actual" para
apuntar al siguiente nodo de la lista.

Heaps, stacks and queues:

Heaps, stacks y queues son estructuras de datos comunes en programación que se


utilizan para almacenar y organizar datos. A continuación, te explicaré cada una de
ellas.

Heaps:

Un heap es una estructura de datos que se utiliza para mantener un conjunto de


elementos ordenados. Un heap se puede implementar como un árbol binario
completo (es decir, un árbol en el que cada nivel está lleno y el último nivel puede
estar incompleto), en el que cada nodo tiene un valor que es mayor o menor que
los valores de sus hijos (dependiendo de si el heap es un max-heap o un
min-heap). Los elementos se agregan al heap de manera que se mantenga la
propiedad del heap y se pueden eliminar elementos en orden de prioridad.

En Python, se puede utilizar la biblioteca heapq para trabajar con heaps. La


función heapify se utiliza para convertir una lista en un heap, mientras que las
funciones heappush y heappop se utilizan para agregar y eliminar elementos del
heap, respectivamente.

Stacks:

Una stack (o pila) es una estructura de datos que se utiliza para almacenar
elementos de manera que el último elemento agregado es el primero en ser
eliminado. Esto se conoce como el principio LIFO (Last-In, First-Out). Las
operaciones básicas en una stack son push (para agregar un elemento) y pop
(para eliminar el último elemento agregado).

En Python, se puede implementar una stack utilizando una lista y las funciones
append y pop.
Queues:

Una queue (o cola) es una estructura de datos que se utiliza para almacenar
elementos de manera que el primer elemento agregado es el primero en ser
eliminado. Esto se conoce como el principio FIFO (First-In, First-Out). Las
operaciones básicas en una queue son enqueue (para agregar un elemento) y
dequeue (para eliminar el primer elemento agregado).

En Python, se puede implementar una queue utilizando una lista y las funciones
append y pop(0).
Tablas hash:

Las tablas hash (también conocidas como hash tables, mapas hash o
diccionarios) son estructuras de datos que se utilizan para almacenar y buscar
elementos de manera eficiente. En una tabla hash, los elementos se almacenan
en posiciones específicas de una tabla, que se calculan a partir de una función
de hash.

La función de hash toma una clave como entrada y devuelve un número entero,
que se utiliza para calcular la posición en la que se debe almacenar el elemento
en la tabla. Cada posición en la tabla se conoce como un "bucket" (o cubeta) y
puede contener uno o varios elementos. La función de hash debe ser diseñada
para minimizar las colisiones (es decir, cuando dos elementos tienen la misma
posición de almacenamiento), para que la búsqueda sea lo más eficiente
posible.

En Python, las tablas hash se implementan como diccionarios. Por ejemplo,


podemos crear un diccionario que almacene nombres de personas y sus edades
de la siguiente manera:

Podemos buscar la edad de una persona específica utilizando la clave


correspondiente:

También podemos agregar o eliminar elementos del diccionario utilizando los


métodos correspondientes:
Las tablas hash son muy eficientes para buscar elementos en grandes conjuntos
de datos, ya que la búsqueda se realiza en tiempo constante (es decir, el tiempo
de búsqueda no depende del tamaño del conjunto de datos). Sin embargo, la
eficiencia de las tablas hash puede disminuir si hay muchas colisiones, lo que
puede ocurrir si la función de hash no está bien diseñada o si hay demasiados
elementos en la tabla.
Árboles de búsqueda binaria:

Un árbol de búsqueda binaria (BST, por sus siglas en inglés) es una estructura de
datos en forma de árbol que se utiliza para almacenar elementos de manera
ordenada y permitir búsquedas eficientes. En un BST, cada nodo del árbol
contiene un valor y tiene dos hijos (o ninguno), que son llamados subárboles
izquierdo y derecho. Además, para cualquier nodo en el árbol, todos los valores
en el subárbol izquierdo son menores que el valor del nodo, y todos los valores
en el subárbol derecho son mayores.

Un ejemplo de un árbol de búsqueda binaria se muestra a continuación:

En este árbol, el nodo raíz contiene el valor 7, el subárbol izquierdo contiene los
valores 1, 3 y 5, y el subárbol derecho contiene los valores 9, 11 y 13.

Los árboles de búsqueda binaria son útiles porque permiten búsquedas


eficientes en conjuntos de datos ordenados. En un árbol de búsqueda binaria
bien construido, el tiempo de búsqueda es proporcional a la altura del árbol, que
suele ser logarítmico en el número de elementos en el árbol. Esto significa que
para buscar un elemento en un árbol con 1.000 elementos, como máximo se
necesitarán alrededor de 10 comparaciones (ya que log2(1000) ≈ 10).

Además de las búsquedas, los árboles de búsqueda binaria también admiten


otras operaciones comunes, como la inserción de nuevos elementos y la
eliminación de elementos existentes. Estas operaciones se realizan de manera
recursiva, siguiendo las reglas del árbol para mantener la propiedad de
ordenamiento.
Sin embargo, es importante tener en cuenta que la eficiencia de un árbol de
búsqueda binaria puede verse comprometida si está desequilibrado (es decir, si
la altura del árbol es muy grande en comparación con el número de elementos),
ya que esto puede aumentar significativamente el tiempo de búsqueda y otras
operaciones.

En Python, se pueden implementar árboles de búsqueda binaria utilizando clases


y objetos, y existen muchas bibliotecas y módulos disponibles para ayudar en
esta tarea.

A continuación cómo crear y recorrer un árbol de búsqueda binaria en Python:

En este ejemplo, se define una clase Node que representa un nodo en el árbol.
Cada nodo tiene un valor (data), y puede tener un hijo izquierdo (left) y/o un hijo
derecho (right).

El método insert se encarga de insertar un nuevo valor en el árbol, siguiendo las


reglas de ordenamiento del árbol. El método inorder_traversal realiza un recorrido en
orden del árbol (izquierda, raíz, derecha), y devuelve una lista con los valores en
ese orden.

En el siguiente ejemplo, se crea un árbol de búsqueda binaria con algunos


valores, y se muestra el resultado de un recorrido en orden del árbol.

A continuación el ejemplo:
Recursividad:

La recursividad es una técnica de programación que consiste en resolver un


problema dividiéndolo en subproblemas más pequeños, y luego resolviendo
recursivamente cada subproblema hasta llegar a una solución base o trivial.

En Python, se puede implementar la recursividad mediante funciones que se


llaman a sí mismas. Cuando una función se llama a sí misma, se crea una nueva
instancia de la función con su propio conjunto de variables locales, lo que
permite que la función se llame a sí misma de forma recursiva.

Aquí te presento un ejemplo de cómo se puede implementar una función


recursiva en Python para calcular el factorial de un número:

En este ejemplo, la función factorial calcula el factorial de un número n utilizando


recursividad. Si n es igual a cero, se devuelve 1 (que es el caso base). De lo
contrario, se devuelve n multiplicado por el factorial de n-1.

Otro ejemplo común de recursividad en Python es el cálculo de la secuencia de


Fibonacci. La secuencia de Fibonacci es una serie de números en la que cada
número es la suma de los dos números anteriores:

1, 1, 2, 3, 5, 8, 13, 21, 34, 55, …

Aquí te presento un ejemplo de cómo se puede implementar una función


recursiva en Python para calcular los primeros n números de la secuencia de
Fibonacci:
En este ejemplo, la función fibonacci utiliza recursividad para calcular los primeros
n números de la secuencia de Fibonacci. Si n es igual a cero, se devuelve una
lista vacía (que es el caso base). Si n es igual a 1 o 2, se devuelve una lista con
los primeros números de la secuencia. De lo contrario, se calcula la lista de los
primeros n-1 números de la secuencia utilizando recursividad, y se agrega el
siguiente número a la lista.
Algoritmos de clasificación:

Los algoritmos de clasificación son una parte importante de la ciencia de datos y


el aprendizaje automático. Básicamente, los algoritmos de clasificación se
utilizan para categorizar datos en grupos específicos en función de sus
características y atributos.

Aquí te presento algunos de los algoritmos de clasificación más comunes:

1. Clasificación por árboles de decisión:


Este algoritmo utiliza un árbol de decisiones para clasificar los datos. Cada
nodo del árbol representa una característica de los datos, y cada rama
representa una decisión basada en esa característica. Este algoritmo es
especialmente útil para problemas de clasificación binaria, como la detección
de spam en correos electrónicos.

Por ejemplo:

from sklearn.tree import DecisionTreeClassifier


from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

# Cargar los datos de iris


iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target,
test_size=0.2)

# Entrenar un árbol de decisiones


clf = DecisionTreeClassifier()
clf.fit(X_train, y_train)

# Realizar predicciones en los datos de prueba


predictions = clf.predict(X_test)

# Evaluar la precisión del modelo


accuracy = clf.score(X_test, y_test)
print("Precisión: ", accuracy)
2. Clasificación por k-vecinos más cercanos (KNN):

Este algoritmo se basa en encontrar los k datos más cercanos a un punto de


datos dado y clasificar ese punto en función de las clases de esos k datos.
Este algoritmo es útil cuando se tienen muchos datos de entrenamiento

Por ejemplo:

from sklearn.neighbors import KNeighborsClassifier


from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

# Cargar los datos de iris


iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target,
test_size=0.2)

# Entrenar un modelo KNN


k=3
clf = KNeighborsClassifier(n_neighbors=k)
clf.fit(X_train, y_train)

# Realizar predicciones en los datos de prueba


predictions = clf.predict(X_test)

# Evaluar la precisión del modelo


accuracy = clf.score(X_test, y_test)
print("Precisión: ", accuracy)
3. Regresión logística:

Este algoritmo se utiliza para problemas de clasificación binaria, en los que se


busca predecir si un elemento pertenece a una clase determinada o no. La
regresión logística utiliza una función logística para modelar la relación entre
los datos de entrada y la probabilidad de que un elemento pertenezca a una
clase determinada

Por ejemplo:

from sklearn.linear_model import LogisticRegression


from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split

# Cargar los datos de cáncer de mama


cancer = load_breast_cancer()
X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target,
test_size=0.2)

# Entrenar un modelo de regresión logística


clf = LogisticRegression()
clf.fit(X_train, y_train)

# Realizar predicciones en los datos de prueba


predictions = clf.predict(X_test)

# Evaluar la precisión del modelo


accuracy = clf.score(X_test, y_test)
print("Precisión: ", accuracy)
4. Naive Bayes:

Este algoritmo se basa en el teorema de Bayes y se utiliza para problemas de


clasificación. Se supone que todas las características de los datos son
independientes entre sí y se utilizan para predecir la clase a la que pertenece
un elemento. Este algoritmo es especialmente útil para problemas de
clasificación de texto

Por ejemplo:

from sklearn.naive_bayes import GaussianNB


from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

# Cargar los datos de iris


iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target,
test_size=0.2)

# Entrenar un modelo Naive Bayes


clf = GaussianNB()
clf.fit(X_train, y_train)

# Realizar predicciones en los datos de prueba


predictions = clf.predict(X_test)

# Evaluar la precisión del modelo


accuracy = clf.score(X_test, y_test)
print("Precisión: ", accuracy)
5. Máquinas de vectores de soporte (SVM):

Este algoritmo se utiliza para clasificar datos en dos o más categorías. Se


busca encontrar un hiperplano que separe los datos en diferentes categorías.
Este algoritmo es especialmente útil para problemas en los que las clases no
están claramente separadas

Por ejemplo:

from sklearn.svm import SVC


from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

# Cargar los datos de iris


iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target,
test_size=0.2)

# Entrenar

Estos son solo algunos de los algoritmos de clasificación más comunes.


Cada algoritmo tiene sus propias ventajas y desventajas, y la elección del
algoritmo adecuado depende del problema específico que se esté intentando
resolver.
Temas avanzados

● iteradores
● RegEx
● Decoradores
● Lambas

Iteradores:

En Python, un iterador es un objeto que permite recorrer un conjunto de


elementos de forma secuencial, sin necesidad de conocer su estructura interna.
Los iteradores son muy útiles para trabajar con grandes conjuntos de datos, ya
que permiten acceder a los elementos de forma eficiente, sin necesidad de
cargar todo el conjunto de datos en memoria.

En Python, los iteradores se implementan mediante dos métodos: __iter__() y


__next__(). El método __iter__() devuelve el propio objeto iterador, mientras que el
método __next__() devuelve el siguiente elemento del conjunto. Si no hay más
elementos en el conjunto, el método __next__() debe levantar la excepción
StopIteration.

Aquí te presento un ejemplo básico de cómo implementar un iterador en Python:


En este ejemplo, la clase MiIterador define un iterador que devuelve los primeros
max números enteros. El método __iter__() simplemente devuelve el propio objeto
iterador, mientras que el método __next__() devuelve el siguiente número entero en
la secuencia. Cuando se han devuelto todos los elementos de la secuencia, el
método __next__() levanta la excepción StopIteration.

Aquí te presento un ejemplo de cómo utilizar este iterador en un bucle for:

Este código imprimirá los números del 0 al 4.

Además, en Python existen algunas funciones integradas que utilizan iteradores,


como map(), filter() y zip(). Por ejemplo, map() recorre un iterador y aplica una función
a cada elemento, devolviendo otro iterador con los resultados. Aquí te presento
un ejemplo:

Este código imprimirá los cuadrados de los números del 1 al 5. En este caso,
map() recorre el iterador mi_lista y aplica la función cuadrado() a cada elemento,
devolviendo un iterador con los resultados. Luego, el bucle for recorre este
iterador e imprime cada resultado.
RegEx:

RegEx o expresiones regulares es una herramienta que nos permite definir


patrones de búsqueda en cadenas de texto. Con RegEx podemos buscar
patrones específicos en una cadena de texto, validar si una cadena de texto
cumple con ciertos criterios, o incluso extraer información específica de una
cadena de texto.

En Python, el módulo re nos permite trabajar con expresiones regulares. Aquí te


presento algunos ejemplos de cómo se podrían utilizar expresiones regulares en
Python:

1. Validar un número de teléfono:

En este ejemplo, utilizamos la expresión regular ^\d{3}-\d{3}-\d{4}$ para validar un


número de teléfono en formato XXX-XXX-XXXX. La expresión regular se
compone de los siguientes elementos:

● “^” : indica el inicio de la cadena de texto


● “ \d ” : indica cualquier carácter numérico
● “ {3} “ : indica que el patrón anterior debe repetirse exactamente tres veces
● “ - “ : indica un guión literal
● “ $ “ : indica el final de la cadena de texto

Si la cadena de texto telefono cumple con el patrón definido en patron, se imprime


el mensaje "El número de teléfono es válido". Si no cumple con el patrón, se
imprime el mensaje "El número de teléfono no es válido".
2. Buscar todas las coincidencias de una expresión regular en una cadena de
texto:

En este ejemplo, utilizamos la expresión regular \b[a-zA-Z]+\b para buscar todas las
palabras en la cadena de texto texto. La expresión regular se compone de los
siguientes elementos:

● “ \b “ : indica un límite de palabra (es decir, el inicio o final de una palabra).


● “ [a-zA-Z]+ “ : indica una o más letras mayúsculas o minúsculas.
● “ \b “ : indica un límite de palabra

La función re.findall() busca todas las coincidencias de la expresión regular en la


cadena de texto texto, y devuelve una lista con las palabras encontradas.

En este caso, se imprime la lista ['Este', 'es', 'un', 'ejemplo', 'de', 'texto', 'con', 'varias', 'palabras'].

Estos son solo algunos ejemplos básicos de cómo utilizar expresiones regulares
en Python. Hay muchos otros patrones y funciones disponibles en el módulo re, y
las expresiones regulares pueden llegar a ser muy complejas y poderosas.
Decoradores:

Los decoradores en Python son una forma de modificar el comportamiento de


una función sin tener que cambiar el código de la función en sí. Los decoradores
son funciones que toman otra función como argumento, y devuelven una nueva
función que incluye el comportamiento adicional deseado.

En Python, los decoradores se definen utilizando la sintaxis de '@', seguida del


nombre del decorador. Por ejemplo:

En este ejemplo, definimos un decorador llamado mi_decorador, que simplemente


imprime un mensaje antes y después de llamar a la función decorada. La función
decorada es funcion_decorada, que toma cualquier número de argumentos
posicionales y argumentos de palabra clave utilizando *args y **kwargs. Dentro de
funcion_decorada, llamamos a la función original utilizando funcion(*args, **kwargs), y
luego devolvemos el resultado.

Después, aplicamos el decorador mi_decorador a la función mi_funcion utilizando la


sintaxis de '@', y luego llamamos a mi_funcion(). El resultado es que se imprime el
mensaje "Antes de llamar a la función", luego el mensaje "En la función", luego el
mensaje "Después de llamar a la función".
Aquí hay otro ejemplo de un decorador que mide el tiempo que tarda una función
en ejecutarse:

En este ejemplo, definimos un decorador llamado medir_tiempo, que utiliza la


función time.time() para medir el tiempo que tarda en ejecutarse la función
decorada. Después de llamar a la función decorada, imprime el tiempo
transcurrido. Aplicamos el decorador medir_tiempo a la función mi_funcion, que
simplemente espera un segundo y luego imprime un mensaje.

Al llamar a mi_funcion(), el decorador mide el tiempo que tarda la función en


ejecutarse y lo imprime en pantalla. El resultado será algo así como "Tiempo
transcurrido: 1.0022845268249512 segundos".
Lambas:

Las lambdas en Python son funciones anónimas, lo que significa que no tienen
un nombre. Se utilizan para crear funciones pequeñas y simples que se utilizan
sólo en un lugar. Las lambdas se definen utilizando la palabra clave lambda,
seguida de los argumentos de la función separados por comas y luego una
expresión que se evalúa y devuelve el resultado de la función.

Por ejemplo, podemos definir una función lambda que tome dos argumentos y
devuelva su suma:

Podemos utilizar la función suma de la misma manera que utilizaríamos cualquier


otra función:

También podemos utilizar lambdas en combinación con funciones integradas


como filter() o map(). Por ejemplo, podemos utilizar una lambda para filtrar los
números impares de una lista:
En este ejemplo, utilizamos la función filter() para filtrar los elementos de la lista
numeros que son impares. Pasamos una lambda que toma un argumento x y
devuelve True si x es impar y False en caso contrario

Otro ejemplo es utilizar una lambda junto con la función sorted() para ordenar una
lista de tuplas por el segundo elemento de cada tupla:

personas = [('Juan', 25), ('Maria', 18), ('Pedro', 32), ('Luisa', 27)]


personas_ordenadas = sorted(personas, key=lambda x: x[1])
print(personas_ordenadas) # Salida: [('Maria', 18), ('Juan', 25), ('Luisa', 27),
('Pedro', 32)]

En este ejemplo, utilizamos la función sorted() para ordenar la lista personas por el
segundo elemento de cada tupla. Pasamos una lambda que toma una tupla x y
devuelve su segundo elemento x[1], que es el que se utiliza para ordenar la lista.
OOP:
● Clases
● Herencia
● Métodos, dunder

Clases:

Las clases en Python son una forma de encapsular datos y funciones


relacionadas. Las clases son objetos que pueden contener variables (llamadas
atributos) y funciones (llamadas métodos) que operan en esos atributos. Las
clases son fundamentales para la programación orientada a objetos (POO), que
es un paradigma de programación en el que los objetos interactúan entre sí para
realizar tareas.

Para definir una clase en Python, se utiliza la palabra clave class, seguida del
nombre de la clase y dos puntos. Dentro de la clase, se pueden definir atributos y
métodos utilizando la sintaxis normal de Python. Por ejemplo, aquí hay una clase
Persona simple con un atributo nombre y un método saludar:

El método __init__ es un método especial que se llama automáticamente cuando


se crea un objeto de la clase. En este ejemplo, el método __init__ define un atributo
nombre y lo inicializa con el valor pasado como argumento. El método saludar es un
método normal que imprime un saludo utilizando el valor del atributo nombre

Para crear un objeto de la clase Persona, se utiliza la sintaxis


nombre_clase(argumentos). Por ejemplo, para crear una persona llamada Juan y
saludarlo, se podría hacer lo siguiente:
En este ejemplo, se crea un objeto de la clase Persona llamado juan con el nombre
'Juan'. Luego se llama al método saludar() del objeto juan, lo que imprime el saludo
utilizando el valor del atributo nombre

Las clases pueden tener múltiples atributos y métodos, y pueden interactuar con
otros objetos de la misma clase o de clases diferentes. Las clases son una
herramienta poderosa y fundamental en la programación orientada a objetos, y
permiten crear programas más estructurados y modulares.

Herencia:

La herencia es un concepto fundamental en la programación orientada a objetos


que permite a una clase heredar atributos y métodos de otra clase. La clase que
hereda se llama clase hija o subclase, y la clase de la que hereda se llama clase
padre o superclase.

En Python, la herencia se define utilizando la sintaxis class Subclase(ClasePadre):. La


subclase hereda todos los atributos y métodos de la clase padre, y puede
agregar sus propios atributos y métodos. Si la subclase define un método con el
mismo nombre que un método de la clase padre, el método de la subclase
sobrescribe el método de la clase padre.

Aquí hay un ejemplo de una clase Empleado que tiene dos subclases: Programador y
Gerente. La clase Programador hereda los atributos y métodos de la clase Empleado, y
agrega un atributo lenguaje y un método programar. La clase Gerente también hereda
los atributos y métodos de la clase Empleado, pero sobrescribe el método salario
para agregar un bono adicional.
En este ejemplo, la clase Programador hereda los atributos y métodos de la
clase Empleado, y agrega un atributo lenguaje y un método programar. El método
__init__ de la subclase llama al método __init__ de la superclase utilizando la
función super(), y luego agrega el atributo lenguaje. El método programar es un
método adicional que imprime un mensaje que indica que el programador está
programando en un lenguaje específico.

La clase Gerente también hereda los atributos y métodos de la clase Empleado, pero
sobrescribe el método salario para agregar un bono adicional. El método __init__ de
la subclase llama al método __init__ de la superclase utilizando la función super(), y
luego agrega el atributo bono. El método salario es un método sobrescrito que
devuelve el salario base más el bono adicional. Estos ejemplos son solo una
introducción a la herencia en Python. La herencia es una herramienta poderosa y
versátil que permite a los programadores crear jerarquías de clases complejas y
reutilizar código de manera efectiva.
Métodos, dunder:

Los métodos son funciones que se definen dentro de una clase y son utilizados
para manipular los atributos de los objetos de esa clase. Estos métodos pueden
ser llamados por cualquier objeto de la clase y pueden realizar cualquier acción
necesaria en los atributos del objeto.

Por otro lado, los métodos "dunder" (del inglés "double underscore") son
métodos especiales que tienen un doble guión bajo al inicio y al final de su
nombre. Estos métodos son utilizados para definir comportamientos especiales
en las clases, como la comparación entre objetos o la representación en forma
de cadena de un objeto.

Aquí te muestro algunos ejemplos:

En este ejemplo, la clase Persona tiene dos métodos: presentarse() y cumplir_anios(). El


primer método se encarga de imprimir un mensaje presentando a la persona,
mientras que el segundo método aumenta la edad de la persona en 1 y muestra
un mensaje de felicitación.
En este ejemplo, la clase Persona tiene dos métodos "dunder": __eq__() y __str__(). El
primer método define la comparación entre dos objetos de la clase, en este caso,
dos personas son consideradas iguales si tienen la misma edad. El segundo
método define la representación en forma de cadena de un objeto de la clase, en
este caso, una cadena con el nombre y la edad de la persona.

Módulos:
● Incorporado(builtin)
● Costumbre(custom)

Módulos builtin:

Los módulos incorporados (built-in modules) son módulos que vienen


pre-instalados con Python y proporcionan un conjunto de funciones y objetos
que pueden ser utilizados en cualquier programa. Estos módulos son muy útiles
ya que ofrecen una gran cantidad de herramientas que facilitan el trabajo del
programador.

A continuación, te muestro algunos ejemplos de módulos incorporados y cómo


se pueden utilizar:
El módulo ‘math’:

El módulo math proporciona funciones matemáticas comunes, como seno,


coseno, tangente, exponencial, logaritmos, etc. Veamos un ejemplo:

En este ejemplo, importamos el módulo math y utilizamos tres de sus funciones:


sin() para calcular el seno de un ángulo, log10() para calcular el logaritmo en base
10 de un número, y sqrt() para calcular la raíz cuadrada de un número.
El módulo ‘random’:

El módulo random proporciona funciones para generar números aleatorios.


Veamos un ejemplo:

En este ejemplo, importamos el módulo random y utilizamos tres de sus


funciones: randint() para generar un número entero aleatorio entre dos límites,
random() para generar un número real aleatorio entre 0 y 1, y choice() para escoger
un elemento aleatorio de una lista.
El módulo ‘datetime’:

El módulo datetime proporciona funciones para trabajar con fechas y horas.


Veamos un ejemplo:

En este ejemplo, importamos el módulo datetime y utilizamos tres de sus


funciones: now() para obtener la fecha y hora actual, timedelta() para obtener la
fecha y hora de hace un día, y strftime() para formatear una fecha y hora en una
cadena.
Módulos Custom:

Los módulos personalizados en Python son archivos de Python con funciones,


clases y variables que se pueden importar y utilizar en otros programas. Los
módulos personalizados permiten una mayor modularidad y reutilización del
código, lo que facilita el mantenimiento y la escalabilidad de proyectos más
grandes.

Para crear un módulo personalizado en Python, se puede crear un archivo .py


con el código deseado y guardar el archivo en una ubicación accesible desde el
programa principal.

Aquí hay un ejemplo simple de cómo crear y utilizar un módulo personalizado en


Python:

1. Cree un archivo llamado "mimodulo.py" con el siguiente código:

2. En el programa principal, importe el módulo y use las funciones y variables


definidas en él:
En este ejemplo, el módulo personalizado "mimodulo.py" contiene dos funciones
(saludo y despedida) y una variable (numero), y se importa y utiliza en el
programa principal.

Los módulos personalizados también se pueden organizar en paquetes, que son


directorios que contienen uno o más módulos relacionados. Los paquetes
pueden contener otros paquetes y se pueden importar de manera similar a los
módulos individuales.

Paquetes:

● PyPI
● Pip
● Conda

PyPI:

PyPI (Python Package Index) es el repositorio de paquetes de software para el


lenguaje de programación Python. En PyPI se pueden encontrar miles de
paquetes de Python que se pueden descargar e instalar en proyectos de Python
para agregar funcionalidades y características adicionales.

Para utilizar un paquete de PyPI, primero debe instalarse en el sistema local


mediante una herramienta de gestión de paquetes de Python como pip. Luego,
se puede importar el paquete en un proyecto de Python y utilizar las funciones,
clases y variables definidas en el paquete.

Aquí hay algunos ejemplos de paquetes populares de PyPI:

● NumPy: paquete de cálculo numérico para Python, que proporciona matrices


y operaciones matemáticas de alta velocidad para trabajar con datos
numéricos.
● Pandas: paquete de análisis de datos para Python, que proporciona
estructuras de datos de alto rendimiento y herramientas de análisis para
trabajar con datos tabulares y de series temporales.
● Matplotlib: biblioteca de trazado de gráficos para Python, que permite crear
gráficos de alta calidad y personalizados para visualizar datos.
● Flask: marco web minimalista para Python, que permite crear aplicaciones
web rápidas y escalables con una sintaxis sencilla y una arquitectura modular.
● Django: marco web completo para Python, que proporciona una
infraestructura completa para crear aplicaciones web complejas y escalables,
incluyendo ORM, autenticación, administración y más

Estos son solo algunos ejemplos de los muchos paquetes útiles disponibles en
PyPI. Al utilizar estos paquetes, los programadores pueden ahorrar tiempo y
esfuerzo al no tener que escribir código personalizado para funcionalidades
comunes y pueden aprovechar la experiencia y el conocimiento de otros
desarrolladores en la comunidad de Python.

Pip:

pip es una herramienta de línea de comandos para administrar paquetes de


Python desde el repositorio PyPI (Python Package Index). Pip facilita la
instalación, actualización y eliminación de paquetes de Python y sus
dependencias

Aquí hay algunos ejemplos de cómo utilizar pip:

● Instalar un paquete: Para instalar un paquete de PyPI, simplemente escriba


"pip install nombre_del_paquete" en la línea de comandos. Por ejemplo, para
instalar el paquete NumPy, escriba "pip install numpy".
● Actualizar un paquete: Para actualizar un paquete instalado a su última
versión, escriba "pip install --upgrade nombre_del_paquete". Por ejemplo, para
actualizar el paquete NumPy, escriba "pip install --upgrade numpy".
● Listar paquetes instalados: Para ver una lista de todos los paquetes
instalados en su sistema, escriba "pip list" en la línea de comandos.
● Eliminar un paquete: Para eliminar un paquete instalado, escriba "pip uninstall
nombre_del_paquete". Por ejemplo, para eliminar el paquete NumPy, escriba
"pip uninstall numpy".

Pip es una herramienta muy útil para trabajar con paquetes de Python y sus
dependencias, y se utiliza ampliamente en la comunidad de Python. Al usar pip,
los programadores pueden instalar rápidamente paquetes de Python,
mantenerlos actualizados y eliminarlos si ya no son necesarios.
Conda:

Conda es una herramienta de gestión de paquetes multiplataforma que se utiliza


para instalar, administrar y actualizar paquetes y entornos de software. Conda es
especialmente útil para proyectos de ciencia de datos y aprendizaje automático,
ya que ofrece una amplia gama de paquetes y bibliotecas de software científico.

Aquí hay algunos ejemplos de cómo utilizar Conda:

● Crear un entorno: Para crear un entorno de Conda, escriba "conda create


--name nombre_del_entorno" en la línea de comandos. Por ejemplo, para crear
un entorno llamado "myenv", escriba "conda create --name myenv".
● Activar un entorno: Para activar un entorno de Conda, escriba "conda activate
nombre_del_entorno" en la línea de comandos. Por ejemplo, para activar el
entorno "myenv", escriba "conda activate myenv"
● Instalar paquetes: Para instalar paquetes en un entorno de Conda activado,
escriba "conda install nombre_del_paquete" en la línea de comandos. Por
ejemplo, para instalar el paquete NumPy en el entorno "myenv", escriba
"conda install numpy".
● Listar entornos: Para ver una lista de todos los entornos de Conda instalados
en su sistema, escriba "conda env list" en la línea de comandos.
● Eliminar un entorno: Para eliminar un entorno de Conda, escriba "conda env
remove --name nombre_del_entorno" en la línea de comandos. Por ejemplo,
para eliminar el entorno "myenv", escriba "conda env remove --name myenv"

Conda es una herramienta muy útil para trabajar con paquetes de Python y sus
dependencias, y se utiliza ampliamente en la comunidad de Python,
especialmente para proyectos de ciencia de datos y aprendizaje automático. Al
utilizar Conda, los programadores pueden crear fácilmente entornos de trabajo
separados y gestionar sus paquetes de software de forma eficiente.
Temas avanzados

● Lista de comprensiones
● Generador de expresiones
● Paradigmas

Lista de comprensiones:

Las listas de comprensión son una forma concisa de crear una nueva lista a
partir de otra lista existente. Las listas de comprensión se componen de una
expresión, seguida de uno o más ciclos for, y opcionalmente una o más
condiciones if.

Aquí hay algunos ejemplos de listas de comprensión:

1. Crear una lista de cuadrados de los números del 1 al 10:

2. Crear una lista de números pares de una lista existente


3. Crear una lista de palabras que empiezan con una letra específica de una lista
existente:

4. Crear una lista de tuplas a partir de dos listas existentes:

numbers = [1, 2, 3]
colors = ['red', 'green', 'blue']
pairs = [(number, color) for number in numbers for color in colors]
print(pairs) # Output: [(1, 'red'), (1, 'green'), (1, 'blue'), (2, 'red'), (2, 'green'), (2, 'blue'),
(3, 'red'), (3, 'green'), (3, 'blue')]

Las listas de comprensión son una forma elegante y eficiente de crear nuevas
listas a partir de listas existentes. Al utilizar las listas de comprensión, se puede
reducir el número de líneas de código necesarias para realizar una operación y
hacer que el código sea más fácil de leer y entender.
Generador de expresiones:

Un generador de expresiones en Python es una forma de crear una secuencia de


valores sin almacenarlos todos en la memoria al mismo tiempo. A diferencia de
una lista de comprensión, que crea una lista completa, un generador de
expresiones genera cada valor uno a la vez, y solo cuando es necesario.

La sintaxis de un generador de expresiones es similar a la de una lista de


comprensión, pero en lugar de corchetes, se utilizan paréntesis. Además, en
lugar de usar la función list() para convertirlo en una lista, se utiliza () para crear
un objeto generador.

Aquí hay un ejemplo sencillo de un generador de expresiones que genera los


primeros 10 números pares:

La salida será:
En este ejemplo, la expresión (x for x in range(20) if x % 2 == 0) genera los primeros 10
números pares del rango de 0 a 19. El generador de expresiones se almacena en
la variable gen, que se utiliza en un ciclo for para imprimir cada valor generado
uno a la vez.

Los generadores de expresiones son útiles cuando se trabaja con grandes


conjuntos de datos que no caben en la memoria, ya que solo se generan los
valores que se necesitan en ese momento. También pueden ser más eficientes
en términos de memoria y tiempo de ejecución que una lista de comprensión si
solo se necesita acceder a algunos de los valores generados

Paradigmas:

En programación, un paradigma es una forma particular de abordar la solución


de problemas de programación. Cada paradigma tiene sus propias
características y enfoques, y cada uno puede ser más adecuado para ciertos
tipos de problemas.

Aquí hay algunos ejemplos de paradigmas de programación comunes y sus


características:

1. Programación estructurada: este paradigma se enfoca en la estructura y


organización clara del código. Se divide el programa en bloques de código
que realizan tareas específicas y se evita el uso de estructuras de control
complejas como goto. Ejemplo:
2. Programación orientada a objetos (POO): este paradigma se enfoca en la
definición de objetos y la interacción entre ellos. Los objetos se crean a partir
de clases, que definen sus propiedades y comportamientos, y los objetos
interactúan entre sí mediante el envío de mensajes. Ejemplo:

3. Programación funcional: este paradigma se enfoca en el uso de funciones


puras, es decir, funciones que no tienen efectos secundarios y siempre
devuelven el mismo resultado para los mismos argumentos. Se enfatiza en la
inmutabilidad de los datos y el uso de funciones de orden superior como map
y reduce. Ejemplo:
4. Programación reactiva: este paradigma se enfoca en la construcción de
sistemas que responden a eventos y cambios de estado. Los datos fluyen a
través de un conjunto de funciones que reaccionan a los cambios en los datos
y generan nuevos eventos. Ejemplo:

En este ejemplo, se crea un flujo de eventos que emiten un valor cada


segundo. Luego, se suscribe a este flujo y se imprime cada valor recibido en la
consola.

Cada paradigma tiene sus propias fortalezas y debilidades, y la elección del


paradigma adecuado dependerá del problema que se esté tratando de
resolver

Learn a framework

● Flask
● Django

Testing your apps

● Doctest
● nose
● pytest
● unittest/pyUnit

También podría gustarte