1.
PYTHON
Para comunicarte con una computadora, las instrucciones siempre han de ser claras, precisas y sin ambigüedades. La
computadora nos entiende porque tenemos programas para poder hablar con ella. Esto lo hacemos gracias a los lenguajes
de programación.
Lenguaje:
Sintaxis: es la forma del lenguaje y describe las posibles combinaciones de símbolos que son correctos.
Semántica: es el significado del lenguaje.
En toda comunicación hay un emisor, un mensaje y un receptor. Si el receptor entiende nuestro lenguaje, el mensaje se
recibirá. Pero un computador no entiende nuestro lenguaje, pero sí entiende un lenguaje binario, es decir, basados en "0" y
"1". En este lenguaje, el ordenador entiende impulsos de corriente, donde "0" es que no pasa corriente, y "1" que sí pasa
corriente.
Clasificaciones de los lenguajes de programación según su nivel:
Lenguaje máquina: interpreta directamente el computador, "0" y "1". Es el único lenguaje que el ordenador
entiende, pero es muy complejo para programar para los humanos.
Lenguaje bajo nivel: más complejo que "0" y "1", pero siguen siendo instrucciones muy atómicas. Ejercen un
control directo sobre el hardware o la parte física de la computadora. Siguen siendo complejos para usarse como
base para la programación.
Lenguaje de alto nivel: codifica las instrucciones para un computador de la forma más parecida al lenguaje
humano. Aquí estarían lenguajes como C++, Java o Python.
Python es un lenguaje de alto nivel que nos ofrece una sintaxis y semántica muy sencillas. Nos permite construir programas
capaces de enviar mensajes directamente al computador que finalmente se traducen en "0" y "1". Para entender otros
lenguajes de programación, necesitaremos comprender su sintaxis y semántica, aunque son bastante parecidos entre
sí. Python, a parte de lo mencionado anteriormente, también es multiplataforma y multiparadigma, ya que puede utilizarse
para programar para cualquier cosa.
Python fue creado por Guido van Rossum y su lanzamiento inicial fue en 1991. Van Rossum modeló Python con la idea de
superar las limitaciones del lenguaje ABC, buscando crear un lenguaje que pudiera hacer todo lo que ABC hacía, pero con
una sintaxis clara que fuera fácil de aprender y de usar. Desde su concepción, Python ha estado enfocado en el principio de
legibilidad y simplicidad. Esto no solo hace que sea más fácil de aprender, sino que también permite a los programadores
expresar conceptos complejos en menos líneas de código en comparación con otros lenguajes de programación.
Python se ha desarrollado bajo una licencia de código abierto, lo que significa que cualquiera puede contribuir al desarrollo
del lenguaje. Esta filosofía colaborativa ha ayudado a Python a crecer y adaptarse rápidamente a las cambiantes
necesidades de la industria de la tecnología.
Uno de los documentos más importantes en la comunidad de Python es el "PEP 20", conocido como "El Zen de Python". Este
documento contiene 19 aforismos que capturan la esencia de la filosofía de Python. Algunos ejemplos notables incluyen “Lo
bello es mejor que lo feo”, “Explícito es mejor que implícito” y “Si la implementación es difícil de explicar, es una mala idea”.
La filosofía de Python también enfatiza la importancia de la eficiencia y la practicidad. Python se ha diseñado para ser
altamente extensible, lo que permite a los programadores escribir nuevos módulos y extensiones en C o C++ para realizar
operaciones críticas rápidamente.
En resumen, Python es más que un lenguaje de programación; es una comunidad y una filosofía de diseño que continúa
guiando su desarrollo. Con su énfasis en la claridad, la colaboración y la eficiencia, Python se ha solidificado como uno de los
lenguajes de programación más populares y queridos del mundo.
1.1. Características y ventajas de usar Python
Características principales:
Sintaxis simple y fácil de aprender: Python es famoso por su legibilidad, lo que facilita el aprendizaje para los
principiantes y permite a los desarrolladores expresar conceptos complejos en menos líneas de código que serían
necesarias en otros lenguajes.
Interpretado: Python es procesado en tiempo de ejecución por el intérprete. Puedes ejecutar el programa tan pronto
como termines de escribir los comandos, sin necesidad de compilar.
Tipado dinámico: Python sigue las variables en tiempo de ejecución, lo que significa que puedes cambiar el tipo de
datos de una variable en tus programas.
Multiplataforma: Python se puede ejecutar en una variedad de sistemas operativos como Windows, Linux y
MacOS.
Bibliotecas extensas: Python cuenta con una gran biblioteca estándar que está disponible sin cargo alguno para
todos los usuarios.
Soporte para múltiples paradigmas de programación: Python soporta varios estilos de programación, incluyendo
programación orientada a objetos (POO), imperativa y funcional.
Ventajas de Python:
Productividad mejorada: la simplicidad de Python aumenta la productividad de los desarrolladores ya que les
permite enfocarse en resolver el problema en lugar de la complejidad del lenguaje.
Amplia comunidad: una comunidad grande y activa significa que es fácil encontrar ayuda, colaboración y
contribuciones de terceros.
Aplicabilidad en múltiples dominios: Python se utiliza en una variedad de aplicaciones, desde desarrollo web
hasta inteligencia artificial, ciencia de datos y automatización.
Compatibilidad y colaboración: Python se integra fácilmente con otros lenguajes y herramientas, y es una
excelente opción para equipos de desarrollo colaborativos.
1.2. Programación orientada a objetos, imperativa y funcional
Programación Orientada a Objetos (OOP):
La programación orientada a objetos es un paradigma de programación que organiza el código en unidades
llamadas objetos. Estos objetos combinan datos y funciones que operan en esos datos, y están diseñados para
interactuar entre sí.
Los principios fundamentales de la OOP incluyen:
Encapsulación: los objetos encapsulan o envuelven los datos y las funciones relacionadas en una sola unidad.
Esto ayuda a organizar y modularizar el código, y también permite controlar el acceso a los datos.
Herencia: permite que un objeto herede propiedades y comportamientos de otro objeto, estableciendo una
relación jerárquica entre ellos. Esto facilita la reutilización del código y la creación de jerarquías de clases.
Polimorfismo: los objetos pueden tomar formas diversas. Esto significa que un objeto puede presentarse en
diferentes formas dependiendo del contexto, lo que facilita la creación de interfaces flexibles y genéricas.
Abstracción: los objetos en la programación orientada a objetos son abstracciones de entidades del mundo
real. La abstracción permite simplificar y modelar sistemas complejos de una manera más comprensible.
Programación imperativa:
La programación imperativa es un enfoque en el que se describen detalladamente los pasos o acciones que un
programa debe seguir para alcanzar un estado deseado. Este paradigma se basa en cambiar el estado del
programa mediante la ejecución de comandos o instrucciones.
Algunas características clave de la programación imperativa son:
Variables y asignación: se utilizan variables para almacenar datos, y la asignación de valores a estas
variables es una operación común.
Secuencia de comandos: los programas imperativos están formados por una secuencia de instrucciones que
se ejecutan en orden.
Estructuras de control: se utilizan estructuras de control como bucles y condicionales para controlar el flujo
del programa.
Procedimientos y funciones: se definen y utilizan procedimientos y funciones para dividir el código en
unidades más pequeñas y manejables.
Programación funcional:
La programación funcional se centra en tratar la computación como una evaluación de funciones matemáticas y
evitar el cambio de estado y datos mutables.
Algunos conceptos clave de la programación funcional incluyen:
Funciones como ciudadanos de primera clase: las funciones se tratan como valores de primera clase, lo
que significa que pueden pasarse como argumentos, devolverse como resultados y almacenarse en variables.
Inmutabilidad: los datos no cambian después de ser creados. En lugar de modificar datos existentes, se crean
nuevos datos.
Expresiones y evaluación: los programas funcionales están formados por expresiones que se evalúan para
producir un resultado, y no por una secuencia de instrucciones.
Recursión: en lugar de bucles, la programación funcional a menudo utiliza la recursión para iterar sobre
estructuras de datos.
1.3. Python2, Python3, PIP2 y PIP3
Python 2 vs Python 3:
Sintaxis de "print": en Python 2, print es una declaración, mientras que en Python 3, print() es una función, lo
que requiere el uso de paréntesis.
División de enteros: Python 2 realiza una división entera por defecto, mientras que Python 3 realiza una división
real (flotante) por defecto.
Unicode: Python 3 usa Unicode (texto) como tipo de dato por defecto para representar cadenas, mientras que
Python 2 utiliza ASCII.
Librerías: muchas librerías populares de Python 2 han sido actualizadas o reescritas para Python 3, con mejoras y
nuevas funcionalidades.
Soporte: Python 2 llegó al final de su vida útil en 2020, lo que significa que ya no recibe actualizaciones, ni siquiera
para correcciones de seguridad.
PIP2 vs PIP3:
Gestión de paquetes: PIP2 y PIP3 son herramientas que permiten instalar paquetes para Python 2 y Python 3,
respectivamente. Es importante usar la versión correcta para garantizar la compatibilidad con la versión de Python
que estés utilizando.
Comandos de instalación: el uso de pip o pip3 antes de un comando determina si el paquete se instalará en
Python 2 o Python 3. Algunos sistemas operativos pueden requerir especificar pip2 o pip3 explícitamente para evitar
ambigüedades.
Ambientes virtuales: es una buena práctica usar ambientes virtuales para mantener separadas las dependencias
de proyectos específicos y evitar conflictos entre versiones de paquetes para Python 2 y Python 3.
1.4. Intérprete de Python
El intérprete de Python es el corazón del lenguaje de programación Python; es el motor que ejecuta el código que escriben
los programadores. Cuando hablamos del "intérprete de Python", nos referimos al programa que lee y ejecuta el código
Python en tiempo real.
El intérprete de Python es una herramienta poderosa y flexible que hace que el lenguaje sea accesible y eficiente para una
amplia variedad de aplicaciones de programación. Comprender cómo funciona el intérprete es fundamental para cualquier
programador que desee dominar Python. Podemos acceder al intérprete de Python con python3 .
Funciones clave del intérprete de Python:
Ejecución de código: el intérprete ejecuta el código escrito en Python línea por línea, lo que facilita la depuración y
permite a los desarrolladores probar fragmentos de código de forma interactiva.
Modo interactivo: el intérprete puede usarse en un modo interactivo que permite a los usuarios ejecutar comandos
de Python uno a uno y ver los resultados de inmediato, lo cual es excelente para el aprendizaje y la
experimentación.
Modo de script: además del modo interactivo, el intérprete puede ejecutar programas completos o scripts que se
escriben en archivos con la extensión .py.
Compilación a bytecode: aunque Python es un lenguaje interpretado, internamente, el intérprete compila el código
a bytecode antes de ejecutarlo, lo que mejora el rendimiento.
Máquina virtual de Python: el bytecode compilado se ejecuta en la Máquina Virtual de Python (Python Virtual
Machine – PVM), que es una abstracción que hace que el código de Python sea portable y se pueda ejecutar en
cualquier sistema operativo donde el intérprete esté disponible.
Ventajas del intérprete de Python:
Facilidad de uso: la capacidad de ejecutar código inmediatamente y de manera interactiva hace de Python una
herramienta excelente para principiantes y para el desarrollo rápido de aplicaciones.
Portabilidad: el intérprete de Python está disponible en múltiples plataformas, lo que significa que los programas de
Python pueden ejecutarse en casi cualquier sistema sin modificaciones.
Extensibilidad: el intérprete de Python permite la extensión con módulos escritos en otros lenguajes como C o C++,
lo que puede ser utilizado para optimizar el rendimiento.
Al compilar un script de Python en un ejecutable, todo el código y las dependencias necesarias (como
Python y las bibliotecas) se incrustan dentro del archivo ejecutable. Éste contendrá contendrá un
intérprete de Python embebido.
1.5. Shebang en Python
El shebang es una línea que se incluye al principio de un script ejecutable para indicar al sistema operativo con qué
intérprete debe ejecutarse el archivo. En los scripts de Python, el shebang común es: #!/usr/bin/env python3 .
Esta línea le dice al sistema que utilice el entorno (env) para encontrar el intérprete de Python 3 y ejecutar el script con él. Es
fundamental para asegurar que el script se ejecute con Python 3 en sistemas donde Python 2 todavía está presente. Es de
especial importancia usar el shebang cuando queremos ejecutar un script con ./ .
1.6. Convenios en Python
Los convenios de codificación son un conjunto de recomendaciones que guían a los desarrolladores de Python para
escribir código claro y consistente. El cumplimiento de estos convenios no solo mejora la legibilidad del código, sino que
también facilita la colaboración entre desarrolladores y el mantenimiento a largo plazo del software.
El más conocido es PEP 8, que abarca:
Nombres de variables: utilizar lower_case_with_underscores para nombres de variables y funciones,
UPPER_CASE_WITH_UNDERSCORES para constantes, y CamelCase para clases.
Longitud de línea: limitar las líneas a 79 caracteres para código y 72 para comentarios y docstrings.
Indentación: usar 4 espacios por nivel de indentación.
Espacios en blanco: seguir las prácticas recomendadas sobre el uso de espacios en blanco, como no incluir
espacios adicionales en listas, funciones y argumentos de funciones.
Importaciones: las importaciones deben estar en líneas separadas y agrupadas en el siguiente orden: módulos de
la biblioteca estándar, módulos de terceros y luego módulos locales.
Compatibilidad entre Python 2 y 3: aunque Python 2 ha llegado al final de su vida útil, algunos convenios pueden
seguirse para mantener la compatibilidad.
2. ENTORNOS VIRTUALES
Los entornos virtuales son herramientas esenciales en el desarrollo de software, especialmente en proyectos de
programación que usan lenguajes como Python, [Link] u otros que dependen de bibliotecas y paquetes externos.
2.1. Python estándar ("venv")
El módulo venv (abreviatura de virtual environment) es una herramienta incluida en Python estándar que permite crear
entornos virtuales aislados.
Comandos principales:
python --version : para ver la versión actual de Python.
python -m venv (env) : para crear un entorno virtual, en este caso, se llamará ai.
(env)\Scripts\Activate : para activar el entorno virtual en sistemas Windows con PowerShell.
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned : en Powershell, debemos
asegurarnos que la política de ejecución permita scripts.
(env)\Scripts\[Link] : para activar el entorno virtual en sistemas Windows con CMD.
source (env)/bin/activate : para activar el entorno virtual en sistemas Linux.
pip install (paquete) : para instalar paquetes dentro del entrono virtual.
pip list : verifica las dependencia instaladas.
deactivate : para desactivar el entorno virtual.
2.2. Anaconda
Anaconda es una distribución gratuita y de código abierto de Python y R, diseñada especialmente para la ciencia de datos,
el análisis estadístico, el aprendizaje automático (machine learning) y la computación científica.
Incluye herramientas y bibliotecas ya preinstaladas, como NumPy, Pandas, Matplotlib, Jupyter Notebook y Scikit-learn,
además de un potente gestor de entornos y paquetes llamado conda.
El directorio exacto para usar Anaconda en Linux es: root/anaconda3/bin/conda.
Comandos principales:
Gestión de entornos:
conda create -y --name (mi_entorno) : crear un nuevo entorno.
conda create --name (mi_entorno) python=3.10 : crear un entorno con versión específica de Python. Por
defecto, éste se encuentra en C:\Users\PC GAMING\anaconda3\envs\(mi_entorno).
conda env list : listar entornos disponibles.
conda activate (mi_entorno) : activar un entorno.
conda deactivate : desactivar el entorno actual.
conda remove --name (mi_entorno) --all : eliminar un entorno.
conda env create -f [Link] : crea un nuevo environment de Conda según lo definido en el archivo
[Link].
conda env update -f [Link] : actualiza un environment existente con los paquetes y versiones del
archivo [Link] (o lo crea si no existe).
Gestión de paquetes:
conda install (nombre_paquete) : instalar un paquete.
conda install -n (mi_entorno) (nombre_paquete) : instalar un paquete en un entorno específico.
conda update (nombre_paquete) : actualizar un paquete.
conda update conda : actualizar conda.
conda remove (nombre_paquete) : eliminar un paquete.
conda list : listar los paquetes instalados.
Información y mantenimiento:
conda info : ver información sobre el entorno activo.
conda info --envs : para ver una lista de todos los entornos virtuales disponibles en Anaconda.
conda config --show channels : ver canales de instalación configurados.
conda config --add channels conda-forge : agregar un canal.
conda clean --all : limpiar caché y paquetes no usados.
Otras utilidades:
conda env export > [Link] : exportar un entorno a un archivo .yml.
conda env create -f [Link] : crear un entorno a partir de un archivo .yml.
conda check : verificar dependencias y conflictos.