{ "cells": [ { "metadata": { "collapsed": true }, "cell_type": "markdown", "source": [ "# Diferencias entre archivos `.py` y `.ipynb` en Python\n", "\n", "En el ecosistema Python, existen dos formatos principales para escribir y ejecutar código: los archivos **`.py`** (scripts de Python) y los archivos **`.ipynb`** (Jupyter Notebooks). Cada uno tiene usos, ventajas y limitaciones específicas, y entender estas diferencias es fundamental para organizar proyectos de manera eficiente.\n", "\n", "---\n", "\n", "## 1. Archivos `.py`\n", "\n", "Un archivo **`.py`** es un script o módulo de Python, que contiene código escrito en **lenguaje Python puro**.\n", "\n", "### 1.1 Características principales\n", "\n", "- **Ejecución secuencial:** el código se ejecuta de arriba hacia abajo.\n", "- **Independiente del entorno gráfico:** puede ejecutarse desde terminal, IDE o servidores sin interfaz visual.\n", "- **Reutilizable y modular:** ideal para definir funciones, clases y módulos que pueden importarse en otros scripts.\n", "- **Ligero y portable:** es un simple archivo de texto plano.\n", "\n", "### 1.2 Ejemplo de archivo `.py`\n", "\n", "```python\n", "# archivo ejemplo.py\n", "\n", "def saludar(nombre):\n", " return f\"Hola, {nombre}!\"\n", "\n", "if __name__ == \"__main__\":\n", " nombre = input(\"Ingresa tu nombre: \")\n", " print(saludar(nombre))\n", "```\n", "\n", "### 1.3 Ventajas\n", "\n", "- Facilita la **modularización** y reutilización del código.\n", "- Compatible con **control de versiones** (Git, Mercurial).\n", "- Mejor integración con **sistemas de producción**, scripts automatizados y pipelines.\n", "- Menor tamaño de archivo y mayor rapidez de ejecución.\n", "\n", "### 1.4 Limitaciones\n", "\n", "- No permite mostrar visualizaciones interactivas directamente en el flujo del código.\n", "- Menos adecuado para experimentación o documentación interactiva.\n", "\n", "---\n", "\n", "## 2. Archivos `.ipynb`\n", "\n", "Un archivo **`.ipynb`** es un **Jupyter Notebook**, que combina **celdas de código**, **texto enriquecido** (Markdown) y **visualizaciones** en un solo documento.\n", "\n", "### 2.1 Características principales\n", "\n", "- **Celdas ejecutables:** cada celda puede ejecutarse de manera independiente, no necesariamente de arriba hacia abajo.\n", "- **Soporte de Markdown:** permite incluir encabezados, ecuaciones LaTeX, listas, tablas y descripciones detalladas.\n", "- **Visualización integrada:** gráficos, imágenes y salidas interactivas se muestran directamente debajo de cada celda.\n", "- **Interactividad:** permite experimentar con fragmentos de código sin ejecutar todo el script.\n", "\n", "### 2.2 Ejemplo de archivo `.ipynb`\n", "\n", "- Celda de código:\n", "\n", "```python\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "x = np.linspace(0, 10, 100)\n", "y = np.sin(x)\n", "\n", "plt.plot(x, y)\n", "plt.title(\"Gráfico de ejemplo\")\n", "plt.show()\n", "```\n", "\n", "- Celda de Markdown:\n", "\n", "```\n", "# Análisis de datos\n", "En esta sección visualizamos la función seno para comprender su comportamiento.\n", "```\n", "\n", "### 2.3 Ventajas\n", "\n", "- Excelente para **exploración de datos**, análisis y prototipado rápido.\n", "- Combina **documentación, código y resultados** en un solo lugar.\n", "- Ideal para **enseñanza y demostraciones**, ya que se puede ejecutar paso a paso.\n", "- Permite crear **informes reproducibles** exportables a HTML, PDF o slides.\n", "\n", "### 2.4 Limitaciones\n", "\n", "- La ejecución desordenada de celdas puede generar resultados inconsistentes.\n", "- Menor eficiencia y velocidad comparado con `.py` para scripts grandes.\n", "- Más difícil de versionar y fusionar en sistemas de control de código.\n", "- Archivo más pesado debido a la inclusión de salidas, gráficos y metadatos JSON.\n", "\n", "---\n", "\n", "## 3. Comparación resumida\n", "\n", "| Característica | `.py` | `.ipynb` |\n", "|----------------|--------|-----------|\n", "| **Formato** | Texto plano | JSON con código, texto y salidas |\n", "| **Ejecución** | Secuencial | Por celdas, orden flexible |\n", "| **Documentación** | Comentarios | Markdown y LaTeX |\n", "| **Visualización** | Externa (gráficos en ventana) | Integrada, interactiva |\n", "| **Reutilización** | Alta | Media-baja (depende del notebook) |\n", "| **Portabilidad** | Alta, ligero | Media, pesado si incluye salidas |\n", "| **Control de versiones** | Sencillo | Difícil, conflictos frecuentes |\n", "\n", "---\n", "\n", "## 4. Cuándo usar `.py` vs `.ipynb`\n", "\n", "| Escenario | Formato recomendado |\n", "|-----------|-------------------|\n", "| Desarrollo de librerías o módulos | `.py` |\n", "| Automatización y scripts en producción | `.py` |\n", "| Prototipado rápido de modelos | `.ipynb` |\n", "| Análisis exploratorio de datos | `.ipynb` |\n", "| Documentación y enseñanza | `.ipynb` |\n", "| Integración en pipelines CI/CD | `.py` |\n", "\n", "---\n", "\n", "## 5. Buenas prácticas al combinar ambos formatos\n", "\n", "1. **Mantener notebooks para exploración y documentación**, y `.py` para código reutilizable y producción.\n", "2. **Modularizar funciones en `.py`** y llamarlas desde notebooks para análisis o visualización.\n", "3. **Evitar almacenar salidas innecesarias** en notebooks antes de versionar (`Clear All Outputs`).\n", "4. **Exportar notebooks a `.py`**.\n", "5. **Usar `uv` o entornos virtuales** para asegurar que ambos formatos compartan las mismas dependencias.\n", "\n", "---\n", "\n", "## 6. Conclusión\n", "\n", "- Los archivos **`.py`** son la base del desarrollo Python modular, eficiente y reproducible.\n", "- Los archivos **`.ipynb`** son ideales para exploración, experimentación y documentación interactiva.\n", "- En proyectos profesionales, se recomienda **combinar ambos**: `.ipynb` para prototipado y análisis, y `.py` para el código de producción y reutilizable.\n" ], "id": "70b723d6118adc8" }, { "metadata": {}, "cell_type": "code", "outputs": [], "execution_count": null, "source": "", "id": "9fe00645005f3f0d" } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.6" } }, "nbformat": 4, "nbformat_minor": 5 }