Download python - Departamento de Ingeniería Telemática
Document related concepts
no text concepts found
Transcript
PYTHON David García Sánchez Javier García Zurdo Paloma Vaquero Quintana Daniel Ángel Rodríguez Plaza 100029739 100029577 100032948 100025251 Departamento de Ingeniería Telemática Universidad Carlos III de Madrid Software de Comunicaciones 2007-2008 Contenido • Introducción • Descripción • Desarrollo • Uso • Conclusiones • Referencias Software de Comunicaciones 2007-2008 2 Introducción • Python fue creado por Guido van Rossum en 1980 como un sucesor del lenguaje de programación ABC. – Da este nombre al lenguaje inspirado por el popular grupo cómico británico Monty Python • Guido creó Python durante unas vacaciones de navidad en las que (al parecer) se estaba aburriendo • El principal objetivo que persigue este lenguaje es la facilidad, tanto de lectura, como de diseño. Software de Comunicaciones 2007-2008 3 Historia • En 1991, van Rossum publicó el código. En esta etapa del desarrollo ya estaban presente clases con herencia, manejo de excepciones, funciones, y algunos tipos medulares así como un sistema de módulos adoptado de Modula-3; • En el año 1994 se formó comp.lang.python, el foro de discusión principal de Python, marcando un hito en el crecimiento del grupo de usuarios de este lenguaje. • Python alcanzó la versión 1.0 en Enero de 1994. Se incluyeron un gran conjunto de características como las herramientas de la programación funcional: lambda, map, filter y reduce, cortesía de un hacker “Amrit Prem”. Software de Comunicaciones 2007-2008 4 Historia • La última versión liberada proveniente de CWI fue Python 1.2. En 1995, van Rossum continuó su trabajo en Python en la Corporation for National Research Initiatives (CNRI). • En la estancia de van Rossum en CNRI, lanzó la iniciativa Computer Programming for Everybody, con el fin de hacer la programación accesible a más gente. • En 2000, el equipo de desarrolladores principal de Python se cambió a BeOpen.com. Python 2.0 fue el único lanzamiento de BeOpen.com Software de Comunicaciones 2007-2008 5 Historia • Python 2.0 tomó una característica mayor del lenguaje de programación funcional Haskell: list comprenhensions • Python 2.0 introdujo además un sistema de recolección de basura capaz de recolectar ciclos de referencias. • Se van sucediendo una serie de versiones que hacen pequeños cambios. • Una innovación mayor en Python 2.2 fue la unificación de los tipos en Python (tipos escritos en C), y clases (tipos escritos en Python) dentro de una jerarquía. Esa unificación logró un modelo de objetos de Python puro y consistente Software de Comunicaciones 2007-2008 • A abril de 2007, la última versión de producción de Python es la 2.5.1 6 CARACTERÍSTICAS DEL LENGUAJE (I) • PROPÓSITO GENERAL: – No es específico para la Web, aunque el desarrollo de páginas es una posibilidad . – Con Python se puede hacer lo mismo que con Java o C. • LENGUAJE MULTIPARADIGMA: – No fuerza a los programadores a adoptar un estilo particular de programación, sino que permite varios estilos. • MULTIPLATAFORMA: – Unix originalmente. – Disponibilidad en cualquier sistema a través de intérpretes: Windows, Mac, Palm, PlayStation2… Software de Comunicaciones 2007-2008 7 CARACTERÍSTICAS DEL LENGUAJE (II) • INTERACTIVO: – Posee intérprete por línea de comandos. – Cada sentencia se ejecuta y produce resultado visible. • INTERPRETADO: – No se debe compilar/linkar el código antes de su ejecución. – La primera vez que se ejecuta un script de Python se compila y genera bytecode que es luego interpretado. – Alta velocidad de desarrollo y buen rendimiento. • ORIENTADO A OBJETOS: – Ofrece modo sencillo de componentes reutilizables. Software de Comunicaciones 2007-2008 crear programas con 8 CARACTERÍSTICAS DEL LENGUAJE (III) • OPEN SOURCE: – Al ser gratuito y libre, Python Library continúa creciendo. • FUNCIONES Y LIBRERÍAS: – Ofrece posibilidad: programación en ventanas o sistemaen red, crear archivos comprimidos en .zip. Software de Comunicaciones 2007-2008 9 CARACTERÍSTICAS DEL LENGUAJE (IV) • SINTAXIS CLARA: – Muy legible y elegante. – Notación identada obligatoria, en lugar de {} o palabras clave como “Begin” “End”. – Tabulación hacia dentro escalonada con un margen dentro de funciones o bucles. Código en C/Java if (x) { if (y) { f1(); } Software de Comunicaciones 2007-2008 Código en Python if x: if y: f1() f2() f2(); } 10 CARACTERÍSTICAS DEL LENGUAJE (V) • SIMPLE Y PODEROSO: – Muy denso: poco código hace mucho – Soporta objetos y estructuras de datos de alto nivel: strings, listas, diccionarios, etc. – Múltiples niveles de organizar código: funciones, clases, módulos, y paquetes – Si hay áreas que son lentas se pueden reemplazar por plugins en C o C++, siguiendo la API para extender o empotrar Python en una aplicación, o a través de herramientas como SWIG, sip o Pyrex. Software de Comunicaciones 2007-2008 11 NIVELES EN LENGUAJES VS PRODUCTIVIDAD Software de Comunicaciones 2007-2008 Fuente: Scripting: Higher Level Programming for the 21st Century. John K.Ousterhout. 12 Python vs. Perl • Los dos están basados en un buen entendimiento de las herramientas necesarias para resolver problemas – Perl está basado en awk, sed, and shell scripting y su misión es hacer las tareas de administradores de sistemas más sencillas – Python está basado e inspirando en OOP (Object-oriented programming) • Guido van Rossum diseñó un lenguaje simple, poderoso, y elegante orientado a la creación de sistemas a partir de componentes Software de Comunicaciones 2007-2008 13 Python vs. Java • Java es un lenguaje de programación muy completo que ofrece: – – – – Amplio abanico de tipos de datos Soporte para threads Strong typing Y mucho más ... • Python es un lenguaje de scripting: – No ofrece strong typing • Bueno para prototipos pero malo para grandes sistemas – Puede cascar en tiempo de ejecución – Todo lo que puedes hacer con Java también lo puedes hacer con Python • Incluso puedes acceder a través de Python a las API de Java si usas Jython Software de Comunicaciones 2007-2008 14 Python vs. Jython • Python – También llamado Cpython – Implementación del lenguaje Python en C – Python C API permite extender Python con librerías realizadas en C – Partes que requieren mayor rendimiento en Python están implementadas en C o C++ y tan sólo contienen una pequeña capa de Python encima • Jython – Implementación de Python en Java – Permite acceder a todas las APIs de Java • P.E. Podemos producir Swing GUIs desde Python Software de Comunicaciones 2007-2008 15 Python vs. PHP • PHP y Python son: – – – – Interpretados, lenguajes de alto nivel con tipos dinámicos. OpenSource. Fáciles de eprender en comparación com Java y Perl. Extremadamente portables. • Qué posee Python y no PHP?: – Lenguaje de programación de propósito general (no sólo para la web). – Herencia múltiple. – Argumentos sencillos para funciones y métodos (vs. PHP: http://uk2.php.net/manual/en/functions.arguments.php ) Software de Comunicaciones 2007-2008 16 Python vs. Ruby • Semejanzas: – Son lenguajes de alto nivel con tipos dinámicos. – Proporcionan línea de comandos interactiva y librerías estándar. • Qué posee Ruby y no Python?: – Se pueden definir constantes. – Sólo hay un tipocontenedor de listas: Array. – No hay acceso directo a a atributos, todo se realiza con llamadas a métodos. Software de Comunicaciones 2007-2008 17 ¿PARA QUÉ NO ES ÚTIL? • Python no es el lenguaje perfecto, no es bueno para: – Programación de bajo nivel (system-programming), programación de drivers y kernels como • Python es de demasiado alto nivel, no hay control directo sobre memoria y otras tareas de bajo nivel – Aplicaciones que requieren alta capacidad de computo • No hay nada mejor para este tipo de aplicaciones que el viejo C • Python es ideal: – Como lenguaje "pegamento" para combinar varios componentes juntos – Para llevar a cabo prototipos de sistema – Para la elaboración de aplicaciones cliente – Para desarrollo web y de sistemas distribuidos – Para el desarrollo de tareas científicas, en los que hay que simular y prototipar rápidamente Software de Comunicaciones 2007-2008 18 VENTAJAS: • Desarrollo rápido: Escritura y ejecución del programa, saltándose el proceso de compilación. Permite hacer mejoras y debugging de manera rápida y simple. • Documentación amplia y detallada. • Los lenguajes ágiles son más productivos • El código Python es más legible y es mantenible. Software de Comunicaciones 2007-2008 19 INCONVENIENTES: • LENTITUD: - Los programas interpretados son más lentos que los compilados. - A pesar de esto, dada la simpleza del lenguaje, es fundamental a la hora de desarrollar aplicaciones rápidamente. Software de Comunicaciones 2007-2008 20 EJEMPLOS PYTHON • EJEMPLO I: Código encargado de obtener el cuadrado con los números del 0 al 9. Software de Comunicaciones 2007-2008 21 EJEMPLOS PYTHON – EJEMPLO II: Código que saludará al usuario si se conoce su plato preferido, o le preguntará cuál es en caso contrario: Software de Comunicaciones 2007-2008 22 EJEMPLOS PYTHON • EJEMPLO III: Código que busca y encuentra palabras palíndromas en un archivo de texto indicado. Software de Comunicaciones 2007-2008 23 CASOS DE USO • Programación de páginas Web (.psp .py CGI's) a través del modulo mod_python para Apache • Interfaces Gráficas (Tkinter, WxPtython) • Programación mono -.NET (IronPython) • Programación Java (Jython) • Programación de juegos (Pygame) • Programación de dispositivos móviles (sistemas S60 sobre Nokia) Software de Comunicaciones 2007-2008 24 Instalar Python • Bajar la última versión de Python http://www.python.org/download/ (2.4) de – Para Windows ejecutar instalador • Opcionalmente bajarse extensiones Python para Windows32 de: http://starship.python.net/crew/mhammond/ • Podemos editar nuestro código Python con Notepad2 (Alt-H): http://www.flos-freeware.ch/notepad2.html – Para Linux: • En Debian Sarge: apt-get install python2.4 • Para Fedora y Mandrake se pueden obtener los rpms de: http://www.python.org/2.4/rpms.html – rpm -iv python2.4-2.4-1pydotorg.i386.rpm Software de Comunicaciones 2007-2008 25 25 Usando Python desde línea de comando • Para arrancar el intérprete (Python interactivo) ejecutar: C:\>python Python 2.4 (#60, Nov 30 2004, 11:49:19) [MSC v.1310 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. • Un comando simple: >>> print "Hola Mundo" Hola Mundo • Para salir del intérprete Ctrl-D (en Linux) o Ctrl-Z (en Windows) o: Software de Comunicaciones 2007-2008 >>> import sys >>> sys.exit() $ 26 26 Sentencias y bloques Las sentencias acaban en nueva línea, no en ; Los bloques son indicados por tabulación que sigue a una sentencia acabada en ':'. E.j. (bloque.py): # comentarios de línea se indican con carácter '#' name = "Diego1" # asignación de valor a variable if name == "Diego": print "Aupa Diego" else: print "¿Quién eres?" print "¡No eres Diego!" $ python bloque.py ¿Quién eres? ¡No eres Diego! Software de Comunicaciones 2007-2008 27 27 Identificadores • Los identificadores sirven para nombrar variables, funciones y módulos – Deben empezar con un carácter no numérico y contener letras, números y '_' – Python es case sensitive (sensible a la capitalización) • Palabras reservadas: – and elif global or assert else if pass break except import print class exec in raise continue finally is return def for lambda try del from not while Software de Comunicaciones 2007-2008 28 28 Tipos de datos I • Numéricos (integer, long integer, floating-point, and complex) >>> x = 4 >>> int (x) 4 >>> long(x) 4L >>> float(x) 4.0 >>> complex (4, .2) (4+0.2j) Software de Comunicaciones 2007-2008 29 29 Tipos de datos II • Strings, delimitados por un par de (', " ,""") – Dos string juntos sin delimitador se unen >>> print "Hi" "there" Hithere – Los códigos de escape se expresan a través de '\': – Algunos de los métodos que se pueden aplicar a un string son: >>> len('La vida es mucho mejor con Python.') 34 >>> 'La vida es mucho mejor con Python.'.upper() 'LA VIDA ES MUCHO MEJOR CON PYTHON' >>>"La vida es mucho mejor con Python".find("Python") 27 Software de Comunicaciones 2007-2008 30 30 Tipos de datos III • El módulo string de la Python library define métodos para manipulación de strings: >>> import string >>> s1 = 'La vida es mejor con Python' • '%' es el operador de formateo de cadenas: >>> pais = ‘España' >>> "La capital de %s es %s" “madrid") 'La capital de España es Madrid' % (pais, – Los caracteres de formateo son los mismos que en C Software de Comunicaciones 2007-2008 31 31 Tipos de datos V • Listas [] – Indexadas por un entero comienzan en 0: >>> meses = ["Enero", "Febrero"] >>> print meses[0] Enero Dos puntos (:), permite trabajar con una porción de la lista, el elemento indicado por el segundo parámetro no se incluye: >>> print meses[1:2] ['Febrero'] – Para concatenar lista se usa el operador (+) Software de Comunicaciones 2007-2008 >>> print meses+meses 32 32 Tipos de datos VI – Las listas pueden contener cualquier tipo de objetos Python: – Para añadir un elemento a una lista: >>> items = [4, 6] >>> items.insert(0, -1) >>> items [-1, 4, 6] – Para usar una lista como una pila, se pueden usar append y pop: Software de Comunicaciones 2007-2008 >>> items.append(555) >>> items [-1, 4, 6, 555] >>> items.pop() 555 >>> items [-1, 4, 6] 33 33 Tipos de datos VII • Tuplas (), lo mismo que listas, pero no se pueden modificar >>> mitupla = ('a', 1, "hola") >>> mitupla[2] 'hola‘ • Diccionarios {} arrays asociativos o mapas, indexados por una clave, la cual puede ser cualquier objeto Python, aunque normalmente es una tupla: >>> mydict = {"altura" : "media", "habilidad" : "intermedia", "salario" : 1000 } >>> print mydict["habilidad"] intermedia Software de Comunicaciones 2007-2008 34 34 Control de flujo: condicionales • E.j. (condicional.py) q = 4 h = 5 if q < h : print "primer test pasado" elif q == 4: print “q tiene valor 4” else: print "segundo test pasado" >>> python condicional.py primer test pasado Software de Comunicaciones 2007-2008 • Operadores booleanos: "or," "and," "not" • Operadores relacionales: ==, >, <, != 35 35 Control de flujo: bucles • for se utiliza para iterar sobre los miembros de una secuencia – Se puede usar sobre cualquier tipo de datos que sea una secuencia (lista, tupla, diccionario) • Ej. bucle.py for x in range(1,5): print x $ python bucle.py 1 2 3 4 Software de Comunicaciones 2007-2008 36 36 Control de flujo: bucles • while es otra sentencia de repetición. – Ejecuta un bloque de código hasta que una condición es falsa. • break nos sirve para salir de un bucle Software de Comunicaciones 2007-2008 37 37 Funciones • Las funciones se declaran utilizando la palabra clave def # funcionsimple.py def myfunc(a,b): sum = a + b return sum print myfunc (5,6) $ python funcionsimple.py 11 Software de Comunicaciones 2007-2008 • A una función se le pueden asignar parámetros por defecto: def myfunc(a=4,b=6): 38 38 Clases • Una clase contiene una colección de métodos. Cada método contiene como primer parámetro (self) que hace referencia a un objeto – self equivalente a this en C++ • En Python se soporta la herencia múltiple Software de Comunicaciones 2007-2008 39 39 USO: Parsear un fichero XML – Mediante los Parsers SAX (Secuenciales, consumen poca memoria, no permiten acceder de forma sencilla a elementos anteriores). En Python es ofrecido por el módulo xml.sax de la Python Library – Parsers DOM (Construye una representación (un árbol) en memoria del documento, máximo consumo de memoria, permite acceder fácilmente a todos los detalles del documento). Python provee el módulo xml.dom.minidom que es una implementación sencilla de DOM Software de Comunicaciones 2007-2008 40 Extensible Style Language Transformations (XSLT) (1) • ¿Qué es? – Un lenguaje de programación • ¿De qué sirve? – De transformar el árbol de un fichero XML a otro formato. – Mas frecuente – a otro fichero XML. • Herramientas Python: para procesamiento XSLT tools en – http://uche.ogbuji.net/tech/akara/nodes/2003-0101/python-xslt Software de Comunicaciones 2007-2008 41 Programación de GUIs: Tkinter (1) • Tkinter: Es la interfaz estándar de Python, o tambien llamada caja de herramientas GUI del Tk. Software de Comunicaciones 2007-2008 42 Programación de GUIs: Tkinter, Pmw – Pmw (Python meta widgets) (http://pmw.sourceforge.net/) • Componentes más elaborados encima de Tkinter Software de Comunicaciones 2007-2008 43 Programación de GUIs: wxPython Software de Comunicaciones 2007-2008 44 Python Server Pages • Se pueden insertar sentencias Python en documentos HTML o XML – Similar a PHP, JSP o ASP • ¿Es buena práctica mezclar marcado y código? – Patrón de diseño MVC • Sintaxis muy similar a JSP, 4 tipos de entidades: Software de Comunicaciones 2007-2008 45 LAMP con Python • Python se utiliza en las tecnologías LAMP (configurar sitios web o Servidores dinámicos con un esfuerzo reducido.) Software de Comunicaciones 2007-2008 46 Otras aplicaciones • Servicios Web: Desde Python se puede usar tanto CORBA (omniORBpy) como servicios web (SOAPpy) • Programa eXtrans: permite traducir fácilmente documentos XML a cualquier otro formato o representación • Jython es una implementación de Python que se integra de manera transparente con la plataforma Java. Software de Comunicaciones 2007-2008 47 Conclusiones (1) • Es fácil • Se escribe y se lee rápido • Es práctico, rápido y potente • Es Software Libre • Tiene una gran comunidad http://python.com.ar Software de Comunicaciones 2007-2008 48 Conclusiones (2) Software de Comunicaciones 2007-2008 49 Referencias • Dive into Python: http://diveintopython.org/http://diveintopython.org/ • http://es.wikipedia.org/wiki/Python • Mark Lutz & David Ascher. Learning Python. 1999. • http://wiki.python.org/moin/LanguageComparisons • Jóse Félix Ontañón Carmona. Introducción a Python. http://www.xinug.org/drupal/files/charlas/intro-python.pdf Software de Comunicaciones 2007-2008 50