{ "metadata": { "celltoolbar": "Slideshow", "name": "", "signature": "sha256:61df5e633b537aa1e6e331db529124f78211447cc3a352d58854bff78516363d" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# \u00bfPor qu\u00e9 Python?\n", "\n", "### Juan Luis Cano y Alejandro S\u00e1ez, 2014-03-17" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Python y nosotros\n", "\n", "* Formaci\u00f3n autodidacta\n", "* Uso creciente en muchas asignaturas de la carrera\n", "* \u00abCurso de Python aplicado a la Ingenier\u00eda Aeron\u00e1utica\u00bb organizado por Ongawa" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Ventajas de Python frente a MATLAB y Maple" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Inspiraci\u00f3n:\n", "\n", "* Experiencia propia\n", "* http://metarabbit.wordpress.com/2013/10/18/why-python-is-better-than-matlab-for-scientific-software/\n", "* http://lugtigheid.ca/2013/08/matlab-vs-python/\n", "* http://www.pyzo.org/python_vs_matlab.html\n", "* http://www.stat.washington.edu/~hoytak/blog/whypython.html\n", "* http://phillipmfeldman.org/Python/Advantages_of_Python_Over_Matlab.html\n", "* http://picachu.dmt.upm.es/iimyo/inconsistencias.html\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Software libre" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "* Posibilidad de estudiar su funcionamiento y corregirlo o mejorarlo" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "* Sin restricciones para su uso o distribuci\u00f3n, incluso para uso comercial" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "* Historial de cambios completo" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "### Portable" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "### Coste total de propiedad = cero" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### El lenguaje Python\n", "\n", "* Prop\u00f3sito general, mucho mejor dise\u00f1ado\n", "* Orientaci\u00f3n a objetos real y muy potente\n", "* Paradigma extendido, m\u00e1s apropiado para equipos interdisciplinares\n", "* Sin restricciones para la definici\u00f3n de funciones" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Mejor organizado\n", "\n", "Separaci\u00f3n de funcionalidad en paquetes y bibliotecas reusables" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import numpy # Manejo de arrays\n", "import matplotlib # Representaci\u00f3n gr\u00e1fica" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### M\u00e1s did\u00e1ctico\n", "\n", "Delimitaci\u00f3n de bloques por sangrado" ] }, { "cell_type": "code", "collapsed": false, "input": [ "if 1 > 0:\n", " print(\"Uno es mayor que cero\")\n", "else:\n", " print(\"Algo fue mal\")" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Uno es mayor que cero\n" ] } ], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### M\u00e1s consistente\n", "\n", "* Diferencia clara entre operaciones elemento a elemento y de \u00e1lgebra lineal" ] }, { "cell_type": "code", "collapsed": false, "input": [ "a = numpy.array([1, 2, 3])\n", "b = numpy.array([4, 5, 6])" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "a * b # Elemento a elemento" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 4, "text": [ "array([ 4, 10, 18])" ] } ], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "numpy.dot(a, b) # Producto escalar" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 5, "text": [ "32" ] } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "* Diferencia clara entre indexaci\u00f3n (corchetes) y llamada a funciones (par\u00e9ntesis)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "a[2]" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 6, "text": [ "3" ] } ], "prompt_number": 6 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Ecosistema con multitud de bibliotecas para m\u00faltiples prop\u00f3sitos\n", "\n", "* Bibliotecas cient\u00edficas gen\u00e9ricos o muy espec\u00edficas\n", "* C\u00e1lculo num\u00e9rico y c\u00e1lculo simb\u00f3lico en el mismo lenguaje\n", "* Scripts de sistema operativo\n", "* Interfaces gr\u00e1ficas de usuario (GUIs)\n", "* Servicios web" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Interfaz con otros lenguajes\n", "\n", "* Comunicaci\u00f3n con otros procesos (*glue language*)\n", "* Integraci\u00f3n de c\u00f3digo legado\n", "* Reescritura de partes cr\u00edticas en lenguajes compilados" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Desventajas de Python\n", "\n", "* C\u00f3digo accesible no significa c\u00f3digo f\u00e1cil de entender o arreglar\n", "* Algunas bibliotecas son mantenidas por equipos muy reducidos de voluntarios\n", "* M\u00e1s verborreico como contrapartida a su sintaxis m\u00e1s gen\u00e9rica\n", "* *Paradoja de la elecci\u00f3n*: muchas opciones disponibles, documentaci\u00f3n y recursos dispersos\n", "* Poco material de aprendizaje en espa\u00f1ol (*estamos trabajando en ello*)\n", "* Debilidad en \u00e1reas como teor\u00eda de control\n" ] } ], "metadata": {} } ] }