Introducción a Pythona Librería Estándar Frameworks

download Introducción a Pythona Librería Estándar Frameworks

of 32

Transcript of Introducción a Pythona Librería Estándar Frameworks

  • 8/6/2019 Introduccin a Pythona Librera Estndar Frameworks

    1/32

    Introduccin a PythonLibrera Estndar

    Frameworks

    Jos Flix Ontan [email protected]

  • 8/6/2019 Introduccin a Pythona Librera Estndar Frameworks

    2/32

  • 8/6/2019 Introduccin a Pythona Librera Estndar Frameworks

    3/32

    Python

  • 8/6/2019 Introduccin a Pythona Librera Estndar Frameworks

    4/32

    Introduccin

    Historia Su desarrollo comineza con Guido Van Rossum en 1990 El nombre 'Python' proviene del grupo cmico Monthy Python

    Caractersticas Lenguaje Interpretado/'Compilado' de Muy Alto Nivel De propsito general Programacin en paradigmas Procedimental y Orientado a Objeto Dbilmente tipado Multi plataforma (Cross platform)

    Estructura del cdigo Fin de lnea marca fin de sentencia El sangrado expresa la estructura de bloque

    foo = 'bar'iffoo == 'bar':

    print 'ok'else:

    iffoo == 'rab':print 'it's rab'

  • 8/6/2019 Introduccin a Pythona Librera Estndar Frameworks

    5/32

    Modo Interactivo

    El modo interactivo python muestra la shell python, a travs de la cual

    podemos ejecutar ordenes python como si de una consola se tratase.

    Accedemos a l con solo ejecutar el comando 'python' Mejor manera de aprender y familiarizarse con el lenguaje Contiene un modo de ayuda Prueba y depura tus ideas aqu

    Alternativas:Idle, PyCrust, Spe ...

  • 8/6/2019 Introduccin a Pythona Librera Estndar Frameworks

    6/32

    Tipos y Estructuras de Datos (I)

    Numericos:

    a=132 i=2L f=756.123 x=1+0j

    b=34*75 j=1000L**3 g=55.3*23 y=12.070j*13

    c=45/34 k=4L/2L h=45.0/34.0 z=1+1j/11ja+b i+a f+j x+f

    (integer) (long) (float) (complex)

    Cadenas:

    >>> cad='foobar' >>> cad[:3] >>> cad[-4] >>> cad+' raboof'

    >>> cad[0] 'foo' 'b' 'foobar raboof''f' >>> cad[3:] >>> cad[:-1] >>> cad.capitalize()>>> len(cad) 'bar' 'fooba' 'Foobar'6 >>> cad[1:5] >>> cad[-4:] >>> cad.upper()

    'ooba' 'obar' 'FOOBAR'

    Notas: La divisin con

    enteros trunca

    decimales Python soporta

    enteros largos con

    longitud ilimitada

    Nota:

    | H | e | l | p |

    0 1 2 3 4

    4 3 2 1

  • 8/6/2019 Introduccin a Pythona Librera Estndar Frameworks

    7/32

    Tipos y Estructuras de Datos (II)

    Listas: Conjunto de elementos indexados

    separados por comas

    >> list = ['casa'] >> list.count(123)>> list.append[123] 2>> list.insert[0,'boca'] >> list.pop()['boca','casa',123] 123>> list.sort() >> nest = [12,'a']>> list >> list.append(nest)[123,'boca','casa'] >> list>> list[0:2] [123,'boca','casa',[12,'a']][123,'boca'] >> len(list)>> list[-1] 4'casa'>> list.append(123)

    Disponemos en Python de varios Tipos (estructuras) de Datos Compuestos de forma

    nativa. Los ms comunes, tiles y verstiles son las Listas y los Diccionarios. Pueden

    agrupar elementos de distintos Tipos para realizar operaciones sobre ellos.

    Diccionarios: Conjunto de pares clave valor

    >> dic = {'nombre':'Juan','edad':23,'sexo':'M'}>> dic['nombre']'Juan'>> dic.keys()['nombre','edad','sexo']>> dic.values()['Juan',23,'M']>> dic[144] = 'Euros'

    >> dic{'nombre':'Juan','edad':23,'sexo':'M',144:'Euros'}>> dic>> len(dic)4

  • 8/6/2019 Introduccin a Pythona Librera Estndar Frameworks

    8/32

    Sentencias de Control de Flujo

    if :

    elif :

    else:

    for in :

    while :

    >> lista1 = [1,2,3]>> lista2 = [3,4,5]>> iflista1 == [1,2,3]:... print 'si'si>> iflista1 > lista2:

    ... print 'Mayor'

    ... eliflista1 < lista2:

    ... print 'Menor'

    ... else:print 'Igual'

    Mayor

    >> for numero in range(1,3):.... print numero123>> coord = [(1,1),(1,2),(3,4)]>> for x,y in coord:... print x,y1 11 23 4>> alpha = {1:'a',3:'c',2:'b'}

    >> numeros = alpha.keys()>> numeros.sort()>> for numero in numeros:... print alpha[numero]abc

    >> x = 5>> while x < 0:... print x,... x = x -1

    5 4 3 2 1>> x = 5>> while True:... x = x -1... ifx == 3:... continue... ifx == 0:

    break... print x,4 2 1

  • 8/6/2019 Introduccin a Pythona Librera Estndar Frameworks

    9/32

    Entrada y Salida

    Clasica

    Podemos solicitar valores por teclado con

    raw_input y presentar valores por pantalla con

    print. Python es capaz de representar

    cualquier estructura de datos en formato

    legible 'para humanos'

    >> nombre = raw_input('Nombre: ')Nombre: Jose

    >> edad = 24>> print '%s tiene %d' % (nombre,edad)Jose tiene 24>> file = open('foo.txt','w')>> file.write(datos[0])>> file.close()

    Mejoras/Comodidades

    Modulo cPickle: Guardar y recupera

    desde archivos cualquier tipo de dato, e

    incluso instancias de clases.

    >> import cPickle>> datos = {'Nombre':'Jose','Edad':24}>> file = open('foo.txt','w')>> cPickle.dump(f, datos)>> file.close()>> file = open('foo.txt','r')>> copia = cPickle.load(file)>> copia['Nombre']Jose

    Como en todo lenguaje, podemos trabajar con la E/S de la aplicacin a travs de teclado y

    pantalla o a travs de ficheros. Python aade algunas comodidades al respecto.

  • 8/6/2019 Introduccin a Pythona Librera Estndar Frameworks

    10/32

    Definicin de Funciones (I)

    Todos los argumentos se pasan por referencia. Los

    argumentos pueden pasarse de forma posicional o

    nombrada y con valores por defecto

    Se crean con la palabra reservada 'def'>> defholamundo():... print 'hola mundo'>> holamundo()hola mundo

    No se distingue explcitamente entre funciones

    (devuelven valor) y procedimientos (no

    devuelven valor)

    >> defsumados(numero):... return numero + 2>> print sumados(3)

    5

    Cada funcin define su propio espacio de nombres

    (namespace)

    >> x=5>> defdameUnaX(x):.. print x>> dameUnaX(4)4

    >> defpunto(x=0,y=0):... print '('+x+','+y+')'>> punto()(0,0)>> punto(y=3)(0,3)

  • 8/6/2019 Introduccin a Pythona Librera Estndar Frameworks

    11/32

    Definicin de Funciones (II)

    Una funcin puede devolver cualquier tipo

    o estructura de datos Python

    Una funcin puede recibir como parmetro

    otra funcin. As podemos crear funcionesque encapsulen el comportamiento de otras

    o crear funciones genricas modificables

    por el comportamiento de la funcin que le

    suministremos como parmetro.

    Con *argen la cabecera de la funcin se

    reciben todos los argumentos como una

    lista. Podemos, as, construir funciones con

    nmero variable de argumentos

    >> defdameHora():... return (15,10)>> hora,minuto = dameHora()>> print '%d:%d' % (hora,minuto)15:10

    >> defcalculadora(operacion, op1,op2):.. return operacion(op1,op2)

    >> defsuma(sum1,sum2):... return sum1+sum2>> defresta (res1,res2):... return res1-res2>> print calculadora(suma, 5, 3)8>> print calculadora(resta, 5, 3)2

    >> defcarrito(dueo, *articulos):... print dueo+' Ha comprado:',... for articulo in articulos:... print articulo,>> carrito('Pedro','Champ','Leche')Pedro Ha comprado: Champ Leche

  • 8/6/2019 Introduccin a Pythona Librera Estndar Frameworks

    12/32

    Excepciones

    Se usan las excepciones para el manejo de errores y notificacin de eventos en el flujo deuna aplicacin. Python lanza, por defecto, mltiples interrupciones ante comportamientos

    inesperados, cerrando la aplicacin y devolviendo una traza del programa. Es labor del

    programador capturar y tratar dichas interrupciones. Se utilizan bloques try ... except

    >> try:... print 2/0... except:... print 'Salto una Excepcin'Salto una Excepcin>> try:... print 2/0... except ZeroDivisionError:

    print 'No se divide por 0'... except:... print 'Salto una Excepcin'No se divide por 0

    >> letras=['a','b,'c']>> defdameLetra(pos):... try:... letra = letras[pos]... file = open('letra.txt')... file.write(letra)... file.close()... except (IOError, IndexError):

    ... print 'No se pudo'>> dameLetras(4)No se pudo

  • 8/6/2019 Introduccin a Pythona Librera Estndar Frameworks

    13/32

    Mdulos y Paquetes

    Mdulo: Coleccin de clases, funciones y variables salvadas en un archivo .py Se importan con la palabra reservada

    importseguida del nombre del mdulo (sin

    incluir la extensin)

    Podemos importar un modulo completo o

    clases y funciones independientes con fromPaquete: Coleccin de mdulos situados en un mismo directorio. Para que un

    directorio sea reconocido como paquete es necesario que ste contenga un archivo

    llamado __init__.py que puede estar vaco. Un paquete puede contener subpaquetes

    (subdirectorios, cada uno con su __init__.py)

    Anlogamente podemos importar paquetes

    enteros o mdulos y subpaquetes

    independientes

    >> import math>> math.cos(0)1.0

    >> from string import upper, lower>> print upper('big'), lower('LITTLE')

    BIG little

    >> import mates.algebra>> mates.algebra.seno(0)0.0

    Nota: Puede observarse el contenido de un mdulo o paquete con la funcin dir()

  • 8/6/2019 Introduccin a Pythona Librera Estndar Frameworks

    14/32

    Orientacin a Objeto (I)

    Python implementa la orientacin a objeto soportando clases e instancias. En Python, una clase es tratada como una plantilla a travs de la cual crear instancias. Un objeto creado a partir de una clase es una instancia de la clase El primer argumento en todo mtodo de una clase es una referencia al objeto. Por

    convencin se usa self

    import math

    class vector:p1=(0,0)p2=(0,0)

    defdameDireccion(self):return ( self.p2[0] - self.p1[0],

    self.p2[1] - self.p1[1])

    defdameModulo(self):return math.sqrt((self.p1[0]+self.p2[0])**2 +

    (self.p1[1]+self.p2[1])**2)

    >> vec = vector()>> vec.p1 = (1,2)>> vec.p2 = (2,1)>> print vec.dameDireccion()(1, -1)>> print vec.dameModulo()4.2426406871192848

  • 8/6/2019 Introduccin a Pythona Librera Estndar Frameworks

    15/32

    Orientacin a Objeto (II)

    class pub:a='publico'b='tambien'

    defnuevo(self, s):self.c = s

    defdame(self):print self.a, self.b

    class priv:

    _a = 'no debes'__b = 'no puedes'

    defdame(self):print self._a, self.__b

    >> foo=pub()>> foo.nuevo('new')>> foo.c'new'

    >> foo.dame()publico tambien>> bar=priv()>> bar._a'no debes'>> bar.__bTraceback (most recent call last):

    File "", line 1, in ?AttributeError: a instance has noattribute '__b'>> bar.dame()no debes no puedes

    Cada instancia hereda el comportamiento y atributos definido en la clase y define su

    propio espacio de nombres. Los atributos de una clase pueden ser creadosdinmicamente. Todos los atributos y mtodos de una clase son pblicos.

    Por convencin:

    Atributo/Mtodo quecomienza con _ (guin

    bajo) no debe ser

    usado externamente

    Atributo/Mtodo que

    comienza con __ (dobleguin bajo) no es

    exportado

    directamente.

  • 8/6/2019 Introduccin a Pythona Librera Estndar Frameworks

    16/32

    Orientacin a Objeto (III)

    Python dispone, en el paradigma orientado a objeto, de los llamados m

    todos especialesmediante los cuales podemos sobreescribir el comportamiento de los mtodos internos

    (buil in methods). Todo m todo especial sigue la nomenclatura__nombremetodo__()

    class punto3D: def__init__(self,x=0,y=0,z=0):

    self.x = x

    self.y = yself.z = z

    def__add__(self, other):x = self.x + other.xy = self.y + other.yz = self.z + other.z

    return punto3D(x,y,z)

    def__str__(self): return '(%d,%d%d)' %

    (self.x,self.y,self.z)

    >> a = punto3D(1,1,1)>> print a(1,1,1)

    >> a = punto3D(y=2)>> b = punto3D(1,0,1)>> print a, b(1,0,1) (0,2,0)>> c = a + b>> print c(1,2,1)

    Algunos mtodos especiales

    __len__ : definir el tamao

    que se devuelve al lamar

    len(objeto)

    __sub__: restar dos objetos

    __cmp__: comparar dos

    objetos con , ==, etc...

    __getitem__: soportar

    indexado, ej: objeto[0]

  • 8/6/2019 Introduccin a Pythona Librera Estndar Frameworks

    17/32

    Orientacin a Objeto (IV)Una subclase hereda los mtodos y atributos de otra que llamamos clase base. A esto se

    le llama herencia. El polimorfismo (mtodos que son capaces de operar con distintos tiposy nmeros de argumentos) no est implementado en Python pero se puede programar.

    class punto2D(punto3D): def__init__(self, x=0, y=0):

    vector3D._init_(x,y,0)

    def__add__(self, other):x = self.x + other.xy = self.y + other.y

    return punto2D(x,y)

    def__sub__(self, other):return self.__add__(not other)

    def__not__(self):return punto2D(-self.x, -self.y)

    def__str__(self):return '(%d,%d)' %

    (self.x,self.y)

    class recta: def__init__(self, p1, p2): iftype(p1)==type(p2)=='tuple':

    self.p1 = punto2D(p1[0],p1[1])self.p2 = punto2D(p2[0],p2[1])

    else:self.p1 = p1self.p2 = p2

    defdireccion(self): return self.p2-self.p1

    >> m = recta(punto2D(1,1),punto2D(3,1))>> m.direccion()'(2, 0)'>> m = recta((2,2),(3,1))>> print m.p1+m.p2(5,3)

  • 8/6/2019 Introduccin a Pythona Librera Estndar Frameworks

    18/32

    Librera EstndarUna aproximacin prctica

  • 8/6/2019 Introduccin a Pythona Librera Estndar Frameworks

    19/32

    Introduccin

    Segn se lee en O'Reilly Python Standar Library:

    As pues, en la librera estndar de python encontramos mdulos y paquetes

    para realizar:

    Manejo de cadenas, fechas, etc... Administracin y Servicios del Sistema Operativo Expresiones regulares Protocolos de red Programacin Distribuida ...

    La librera estndar de Python cubre un amplio rango de mdulos.

    Incluye todos los mdulos que son parte del propio lenguaje Python,

    como los tipos de datos y sentencias definidas en la especificacin

    del lenguaje, a mdulos que son probablementetiles solo a un

    n

    mero reducido de programas

  • 8/6/2019 Introduccin a Pythona Librera Estndar Frameworks

    20/32

    Datetime

    El mdulo datetime engloba las clases, funciones y variables necesarias para el manejo

    de fechas y horas. Esta implementacin soporta operaciones de fechas (sumar, restar, etc...)

    y diversas transformaciones (a calendario, timestamp, fecha iso ...)

    import datetime

    people = {'Manuel': '20-03-1999', 'Pedro': '18-12-1981'}

    anyos = 0for cadenaFecha in people.values():

    campos = cadenaFecha.split('-')fecha = datetime.date(int(campos[2]), int(campos[1]), int(campos[0]))diferencia = datetime.date.today() - fechaanyos = anyos + (diferencia.days / 360)

    nombres = str(people.keys())[2:-2].replace("'","")print 'Las edades de: %s suman %d' % (nombres, anyos)

  • 8/6/2019 Introduccin a Pythona Librera Estndar Frameworks

    21/32

    Administracin y Servicios del SO (I)

    Provee de una interfaz unificada de acceso a los servicios de diversos sistemas

    operativos (Posix, nt, mac, dos ...). Programas que hagan un uso correcto del paquete

    os tienen ms oportunidades de ser multiplataforma.

    Paquete os

    Mdulo sys

    Variables y funciones que pueden ser usadas para manipular el entorno de ejecucin

    A destacar: Mdulo os.path: Funciones para la gestin de rutas y archivos

    M

    dulo os.walk: Capaz de caminar a trav

    s de un

    rbol de directorios Llamadas al Sistema Operativo: os.kill, os.execv, os.fork, os.pipe

    A destacar: sys.argv: Lista de cadenas que contiene el nombre del script en ejecucin

    seguido de los parmetros con los que fue invocado dicho script. sys.exit: Funcin para forzar la salida del programa que la invoca. sys.stdin, sys.stdout, sys.stderr: Ficheros de acceso a la entrada,salida y salida

    de errores estndar respectivamente

  • 8/6/2019 Introduccin a Pythona Librera Estndar Frameworks

    22/32

    Administracin y Servicios del SO (II)

    import sysimport osimport datetime

    ifnot os.path.isdir('log'):os.mkdir('log')

    log = open('log'+os.sep+'log'+datetime.datetime.now().isoformat(),'w')

    for root, dir, files in os.walk(sys.argv[1]): for name in files:

    ruta = os.path.join(root,name)tamano = os.path.getsize(ruta)if tamano > int(sys.argv[2]):

    log.write('El archivo: %s ocupa mas de %s bytes\n' % (ruta, sys.argv[2]))

    log.close()

  • 8/6/2019 Introduccin a Pythona Librera Estndar Frameworks

    23/32

    Expresiones RegularesAlguna gente, al confrontar un problema, piensa: 'Ya se!, Usare expresiones

    regulares'. Ahora tienen dos problemasJamie Zawinski, en comp.lang.emacs

    Python provee del mdulo 're' para la aplicacin de expresiones regulares. La

    sintaxis para la definicin de expresiones regulares es similar a la usada en Perl.

    Con 're' podemos ver si una cadena se ajusta a un patrn, si contiene dicho patrn,

    etc...

    Las peculiaridad que aade Python en este sentido es la posibilidad de 'compilar'

    una expresin regular para despus poder aplicarla a mltiples cadenas

    >> import re

    >> emails = re.compile('^[0-9a-zA-Z\.\-\_]+@[[0-9a-zA-Z\.\-\_]+\.[a-zA-Z]{2,3}$')>> ifemails.match('[email protected]'):

    >> print 'valido'valido>> ifemails.match('[email protected]'):>> print 'valido'..>>

  • 8/6/2019 Introduccin a Pythona Librera Estndar Frameworks

    24/32

    Protocolos de Red (I)En su librera estndar, Python provee de mdulos para trabajar con ftp, web,

    sockets, pop ... a muy alto nivel, actuando tanto de cliente como de servidor

    import ftplib

    ftp = ftplib.FTP("ftp.host.com")ftp.login(username, password)ftp.cwd(directory)ftp.retrbinary('RETR '+filename, open(filename,'wb').write)ftp.storbinary('STOR '+filename, open(filename,'rb'))

    import urllib, re

    url = 'http://buscon.rae.es/draeI/SrvltGUIBusUsual?TIPO_HTML=2&LEMA= '

    defbuscon(busqueda):datos = urllib.urlopen(url+busqueda).read()print re.sub("",'',datos)

    Basado en el bash script draepor Javier Carranza

  • 8/6/2019 Introduccin a Pythona Librera Estndar Frameworks

    25/32

    Protocolos de Red (II)

    import SocketServer

    class MyHandler(SocketServer.BaseRequestHandler): defhandle(self): while 1:

    dataReceived = self.request.recv(1024)self.request.send(dataReceived)

    myServer = SocketServer.ThreadingTCPServer(('',8881), MyHandler)myServer.serve_forever( )

    Extraido de O'Reilly Python Cookbook

  • 8/6/2019 Introduccin a Pythona Librera Estndar Frameworks

    26/32

    Programacin DistribuidaPara las llamadas a procedimiento remoto, usadas para comunicar procesos que

    corren en distintas mquinas, Python provee en su librera estndar de interfaz a

    XMLRPC, aunque existen alternativas fuera de la librera como SOAP o CORBA

    import SimpleXMLRPCServer

    class holamundo:

    defhola(self):return 'hola mundo!!'

    server = SimpleXMLRPCServer.SimpleXMLRPCServer(('localhost',8080))server.register_instance(archivoRemoto())server.serve_forever()

    >> import xmlrpclib

    >> server = xmlrpclib.ServerProxy('http://localhost:8080')>> print server.hola()hola mundo !!

  • 8/6/2019 Introduccin a Pythona Librera Estndar Frameworks

    27/32

    Frameworks

  • 8/6/2019 Introduccin a Pythona Librera Estndar Frameworks

    28/32

    Twisted

    Twisted es un framework de desarrollo de aplicaciones de red.

    Permite realizar operaciones tanto a bajo nivel con sockets como a alto nivel, hasta

    tal punto que contiene servidores web, chat, de correo, etc... ya programados ylistos para user o adaptar a las necesidades de la aplicacin de red necesitada.

    Con Twisted podeis tambin crear vuestros propios protocolos de red.

    La programacin de estos es muy sencilla y todo ello en el paradigma orientado

    a objeto en Python

  • 8/6/2019 Introduccin a Pythona Librera Estndar Frameworks

    29/32

    TurboGears

    TurboGears es un framework de desarrollo rpido de aplicaciones web.

    Est basado en el patrn Model View Controller, y

    hace uso de una serie de componentes

    independientes para un desarrollo Front to Back

    Mochikit: Limpia y potente librera Javascript Kid: Sistema de plantillas CherryPy: Hace que programar la entrada/salida

    de la web sea tan fcil como crear funciones

    python SqlObject: Transforma a clases las tablas de tu

    base de datos.

  • 8/6/2019 Introduccin a Pythona Librera Estndar Frameworks

    30/32

    Pygame

    Pygame es un framework multiplataforma diseado para la fcil programacin de

    software multimedia, como por ejemplo juegos, en Python. Pygame requiere la

    biblioteca multimedia SDL para funcionar.

    import sys, pygamepygame.init()

    size = width, height = 640, 480speed = [2, 2]white = 255,255,255

    screen = pygame.display.set_mode(size)ball = pygame.image.load("ball.bmp")ballrect = ball.get_rect()

    while 1: for event in pygame.event.get(): ifevent.type == pygame.QUIT: sys.exit()

    ballrect = ballrect.move(speed) ifballrect.left < 0 or ballrect.right > width:

    speed[0] = -speed[0] ifballrect.top < 0 or ballrect.bottom > height:

    speed[1] = -speed[1]

    screen.fill(white)screen.blit(ball, ballrect)pygame.display.flip()

  • 8/6/2019 Introduccin a Pythona Librera Estndar Frameworks

    31/32

    wxPython

    Existen diversos wrappersde gui toolkits para Python, entre ellos python qt, python

    gtk, o Tkinter. En esta presentacin nos centraremos en, quizs, el ms exitoso de

    ellos: wxPython

    Caractersticas:

    Binding de wxWidgets Multiplataforma Utiliza el set de widget nativo de la plataforma sobre la que corra Sencillez de uso Fcil de crear tus propios widgets

  • 8/6/2019 Introduccin a Pythona Librera Estndar Frameworks

    32/32

    Bibliografa

    O'Reilly Python Cookbook O'Reilly Python Standard Library O'Reilly Python Advanced Programming Manning wxPython In Action Gua de Aprendizaje Python de Guido Van Rossum

    www.python.org

    www.pygame.org

    www.turbogears.org

    www.twistedmatrix.com

    www.wxpython.org

    Esta presentacin se distribuye con la licencia Creative Commons que sigue:

    http://creativecommons.org/licenses/by nc sa/2.5/es/

    http://creativecommons.org/licenses/by-nc-sa/2.5/es/http://creativecommons.org/licenses/by-nc-sa/2.5/es/