analisis del lenguaje python

Upload: aprender-libre

Post on 08-Apr-2018

228 views

Category:

Documents


1 download

TRANSCRIPT

  • 8/7/2019 ANALISIS DEL LENGUAJE PYTHON

    1/27

    ANALISIS DEL LENGUAJE

    PYTHON

    INDICE:

    INTRODUCCIN............................................PAG 1PYTHON BSICO...........................................PAG 1CONTROL DE FLUJO.....................................PAG 9DEFINICIN DE FUNCIONES ......................PAG 12MODULOS........................................................PAG 13ENTRADA Y SALIDA DE FICHEROS .........PAG 16MANEJO DE EXCEPCIONES ........................PAG 18CLASES.............................................................PAG 20LIBRERIAS INTERESANTES.........................PAG 24REFERENCIAS BIBLIOGRFICAS...............PAG 26

    Manual de Python hecho por:Moiss Lorenzo Len

    ETSIT ULPGC

    Se permite la copia, modificacin y distribucin libre

  • 8/7/2019 ANALISIS DEL LENGUAJE PYTHON

    2/27

    1. INTRODUCCIN

    El nombre de Python proviene del espectculo de la BBC Monty Python FlyingCircus, y fue creado por Guido van Rossum en el ao 1990, influido por lenguajes

    como ABC, TCL, Perl, Modula-3 o SmallTalk. Adems ha sido usado de referenciapara nuevos lenguajes como Ruby o Boo, y dispone de varias diferentesimplementaciones como Cpython, Jython, IronPython y PyPy. En el ao 91, elcdigo de Python fue publicado en internet y ya posea capacidad de clases conherencia, manejo de excepciones y funciones. Desde entonces, Python ha idoavanzando a lo largo de los aos, hasta el momento que se encuentra en la versin dePython 2.5

    La base de Python intenta hacer que el lenguaje sea fcilmente comprensible por los

    programadores noveles, por lo que normalmente utiliza palabras en lugar de smbolos(and en lugar de & y or en lugar de |)

    Python utiliza un intrprete de comandos, pero permite la construccin de mdulospara su ejecucin y tambin existe una versin para la compilacin a lenguajemquina. Adems posee paquetes especiales que permiten la integracin eintercambio con C++.

    Para completar esta introduccin, decir que Python es un lenguaje que se estextendiendo a gran velocidad. Por ello, Python ya est usndose activamente enaplicaciones como:

    -Gestor de correo Mailman-Herramienta de arqueologa Carnarvon-Sistema de ficheros de Gmail-Aplicaciones de la NASA-Aplicaciones de Youtube-Plugins de Blender-La distribucin de Linux del proyecto One Laptop per child

    Y muchos ms.

    2. PYTHON BSICO

    Las variables de Python son generales. No hay que definir el tipo de la variable sinoque esta se inicializa al valor que se le indique. Python soporta los tipos de datos quesoportan casi todos los lenguajes, como enteros, flotantes, complejos, caracteres,

    strings, etc. Normalmente las variables son utilizadas como listas escritas de formaque se pueda trabajar con todos los datos como si se obtuvieran desde un vector.Siempre es conveniente saber que variables hemos usado. Python no nos ofrece una

  • 8/7/2019 ANALISIS DEL LENGUAJE PYTHON

    3/27

    gran informacin sobre las variables usadas y por tanto, cuando hemos usadomuchas, podemos tener algn que otro problema. Para ello, se puede ejecutar elcomandoglobals().keys() que nos ofrecer todas las variables creadas, adems demuchas que ha creado el propio interprete.

    El manejo de nmeros complejos puede ser utilizado con dos formatos. El primero deellos es mediante la notacin habitual de Real + jComplejo. Sin embargo, para evitara veces confusiones, se puede utilizar la funcin Complex.

    Ejemplo: Uso matemtico de Python

    >>> 2+24

    >>> 3*4

    12

    >>> 9/42

    >>> #El resto de la divisin se calcula mediante el smbolo %>>> 9%4

    1

    >>> #La divisin entera siempre retorna el valor entero menor

    >>> 11/42

    >>> 1*2j

    2j

    >>> #Declaracin de un numero complejo con notacin real/compleja

    >>> 1+2j(1+2j)

    >>> #Declaracin mediante la funcin Complex>>> complex(1,2)

    (1+2j)

    >>> #Se pueden hacer combinaciones de ambas notaciones

    >>> (1+2j)+complex(3,1)(4+3j)

    >>> #Tambin se pueden extraer los factores>>> a=complex (2,3)

    >>> a.real

    2.0>>> a.imag3.0

    >>> #En caso de no asignar el resultado a una variable, se puede utilizar el carcter _>>> 2*4

    8>>> 4+_

    12

    Esto para trabajar con nmeros. Sin embargo se puede trabajar de igual forma con lascadenas de caracteres o los caracteres. Los caracteres o las cadenas de caracteres sedefinen mediante los smbolos o ' independiente e indistintamente

  • 8/7/2019 ANALISIS DEL LENGUAJE PYTHON

    4/27

    Ejemplo: Uso de Python con caracteres

    >>> "Universidad de Las Palmas de Gran Canaria"'Universidad de Las Palmas de Gran Canaria'

    >>> 'Universidad de Las Palmas de Gran Canaria''Universidad de Las Palmas de Gran Canaria'

    >>> "Universidad de \... Las Palmas de\

    ... Gran Canaria"'Universidad de Las Palmas deGran Canaria'

    >>> #Si se usa se puede escribir literalmente el texto y cerrarlo con >>> print """

    ... Menu:

    ... Opcion 1: Presionar a

    ... Opcion 2: Presionar b

    ... Opcion 3: Presionar c

    ... """

    Menu:

    Opcion 1: Presionar a

    Opcion 2: Presionar bOpcion 3: Presionar c

    >>> #En cuanto a operaciones, se pueden concatenar y repetir con smbolos matemticos

    >>> palabra = 'Py' + 'thon'

    >>> palabra

    'Python'>>> palabra*3

    'PythonPythonPython'>>> (palabra+' ') * 3

    'Python Python Python '>>> #El trabajo con las cadenas es muy flexible

    >>> 'Py'+'thon''Python'

    >>> palabra = 'Py' + 'thon'>>> palabra

    'Python'>>> #Se puede repetir una secuencia como una multiplicacin

    >>> palabra*3'PythonPythonPython'

    >>> #Incluso hacer una operacin un poco mas compleja>>> (palabra+' ') * 3

    'Python Python Python '>>> #Seleccionar las partes de la cadena

    >>> palabra[2]'t'

    >>> palabra [4]

    'o'

    >>> palabra [5]'n'

    >>> #Si se sale de rango hay error

    >>> palabra [6]Traceback (most recent call last):

    File "", line 1, in

  • 8/7/2019 ANALISIS DEL LENGUAJE PYTHON

    5/27

    IndexError: string index out of range>>> #Se puede seleccionar un rango

    >>> palabra [:2]'Py'

    >>> palabra [2:]

    'thon'

    >>> palabra [2:4]'th'

    >>> #Para calcular la longitud de la cadena>>> len (palabra)

    6

    Una de las opciones ms potentes de Python es el uso de listas. Las listas pueden serde cualquier tipo y una misma lista puede tener diferentes tipos de dato. El uso de laslistas es igual a como se ha visto en las cadenas de caracteres. Lo podemos ver en elsiguiente ejemplo

    Ejemplo: Listas y uso de listas

    >>> receta = ['pan', 'carne', 'agua', 10, 50, 100]>>> receta

    ['pan', 'carne', 'agua', 10, 50, 100]

    >>> receta [1]

    'carne'>>> receta [0]

    'pan'>>> #Se puede seleccionar tambin con nmeros negativos

    >>> receta [-1]

    100

    >>> #Si se trata de acceder a un numero que no existe salta un error>>> receta [6]

    Traceback (most recent call last):File "", line 1, in

    IndexError: list index out of range

    >>> #Se pueden subseleccionar elementos

    >>> receta [:3]['pan', 'carne', 'agua']

    >>> receta [3:][10, 50, 100]

    >>> receta [2:5]['agua', 10, 50]

    >>> #No se pueden insertar datos si hay diferentes tipos de datos>>> a[6]='plato'

    Traceback (most recent call last):File "", line 1, in

    TypeError: 'complex' object does not support item assignment

    >>> #Adems se puede hacer composiciones muchas mas complejas

    >>> print """ Para la receta se pueden utilizar... %d gramos de %s,

    ... %d trozos de %s y

    ... %d mililitros de %s """ % (receta[3],receta[0],receta[4],receta[1],receta[5],receta[2])Para la receta se pueden utilizar

    10 gramos de pan,

  • 8/7/2019 ANALISIS DEL LENGUAJE PYTHON

    6/27

  • 8/7/2019 ANALISIS DEL LENGUAJE PYTHON

    7/27

    La funcin map (f,x) llama a la funcinfcon cada uno de los elementos de unasecuencia y devuelve una lista con cada valor de la funcin

    Ejemplo: Funcin map>>> #Uso de la funcin map

    >>> #Retornar el doble de los valores>>> def g(x): return 2*x

    ...

    >>> map (g,range(1,10))

    [2, 4, 6, 8, 10, 12, 14, 16, 18]

    Por ltimo la funcin reduce(f,x) calcula la funcin primero con los dos elementos dela lista y el resultado con el siguiente elemento, y as hasta el final

    Ejemplo: funcin reduce

    >>> #Uso de la funcin reduce

    >>> #Retornar la suma de los elementos de una lista

    >>> def suma (x,y): return x+y

    ...>>> reduce (suma, range(1,11))

    55

    c)Listas autodefinidas

    Cuando las listas son pequeas, pueden introducirse a mano sin necesitar muchotiempo. Sin embargo cuando las listas llevan un gran numero de elementos, se hacetedioso e inseguro introducir a mano los elementos, ya que nos podemos saltaralguno, introducir alguno errneo, etc, y eso hara que nuestros programas fallasensin saber muy bien por qu. Python da la oportunidad de utilizar listas autodefinidas

    para solucionar este problema

    Ejemplo: Listas autodefinidas

    >>> #Ejemplo de declaracin de listas autodefinidas y su uso>>> a=[x for x in range(1,20)]

    >>> a[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

    >>> b=[2*x for x in range(1,20)]

    >>> b

    [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38]>>> c = [b[x]+a[x] for x in range (0, 19)]

    >>> #Hay que recordar que en este caso usamos este rango porque a la hora de hacer referencia se empieza en 0>>> c

    [3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57]

    d) La sentencia delLa sentencia delse utiliza para eliminar elementos de una lista, o una

  • 8/7/2019 ANALISIS DEL LENGUAJE PYTHON

    8/27

    lista completa.

    Ejemplo: Sentencia del

    >>> #Uso de la secuencia del

    >>> a=[x for x in range (1, 20)]

    >>> a[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

    >>> del a[0]

    >>> a[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

    >>> del a[5:9]>>> a

    [2, 3, 4, 5, 6, 11, 12, 13, 14, 15, 16, 17, 18, 19]

    >>> del a[10:]

    >>> a[2, 3, 4, 5, 6, 11, 12, 13, 14, 15]

    >>> del a[:3]>>> a

    [5, 6, 11, 12, 13, 14, 15]

    >>> del a

    >>> aTraceback (most recent call last):

    File "", line 1, in NameError: name 'a' is not defined

    e) Tuplas, conjuntos y diccionariosEstos tres tipos tambin son una parte fundamental del lenguaje Python,

    ya que permiten un mejor uso de las listas y extienden sus posibilidades.Una tupla es muy parecido a una lista, solo que estas se pueden anidar y separar. Sonmuy tiles sobre todo cuando se quieren dar por ejemplo coordenadas

    Ejemplo: Uso de tuplas

    >>> #Uso de tuplas como coordenadas,>>> x=22.4, 34.5, 12.9

    >>> x(22.4, 34.5, 12.9)

    >>> x(22.4, 34.5, 12.9)

    >>> y=12.8, 32.7, 44.7>>> y

    (12.8, 32.7, 44.7)

    >>> z=x,y

    >>> z((22.4, 34.5, 12.9), (12.8, 32.7, 44.7))

    >>> z[0](22.4, 34.5, 12.9)

    >>> z[1]

    (12.8, 32.7, 44.7)

    Los conjuntos son elementos desordenados sin ningn duplicado que normalmente se

  • 8/7/2019 ANALISIS DEL LENGUAJE PYTHON

    9/27

    usan para la comprobacin y el borrado de los mismos. Nos ayudan a mantener loselementos de diferentes tipos separados para su uso

    Ejemplo: Uso de conjuntos

    >>> #Ejemplos de conjuntos. El primero es de bsqueda y el siguiente de operaciones con conjuntos>>> frutas = set (['manzana', 'higo pico', 'mandarina'])

    >>> plantas = set (['tabaiba', 'cardon', 'bejeque'])>>> 'manzana' in frutas

    True

    >>> 'cardon' in plantas

    True>>> 'higo pico' in plantas

    False>>> a=set('supercalifragilisticoespialidoso')

    >>> b=set('abracadabra')

    >>> a

    set(['a', 'c', 'e', 'd', 'g', 'f', 'i', 'l', 'o', 'p', 's', 'r', 'u', 't'])>>> b

    set(['a', 'r', 'b', 'c', 'd'])>>> a-b

    set(['e', 'g', 'f', 'i', 'l', 'o', 'p', 's', 'u', 't'])>>> a & b #and

    set(['a', 'c', 'r', 'd'])>>> a | b #or

    set(['a', 'c', 'b', 'e', 'd', 'g', 'f', 'i', 'l', 'o', 'p', 's', 'r', 'u', 't'])

    >>> a ^ b #xor

    set(['b', 'e', 'g', 'f', 'i', 'l', 'o', 'p', 's', 'u', 't'])

    Los diccionarios son otra de las grandes herramientas de Python. Ofrece definir loselementos mediante una clave o key y a la hora de hacer referencia esto es muchomas claro, evita errores y el cdigo queda mucho ms legible. En lugar de definirsecon corchetes como las listas, se definen mediante llaves, aunque s se referenciancon corchetes.

    Ejemplo: Diccionarios

    >>> telefonos = {'ana':652947583, 'pedro':6385927583, 'juan': 628394756, 'maria':623774135}>>> telefonos

    {'juan': 628394756, 'pedro': 6385927583L, 'ana': 652947583, 'maria': 623774135}

    >>> telefonos['juan']628394756

    >>> telefonos['laura']Traceback (most recent call last):

    File "", line 1, in

    KeyError: 'laura'

    >>> telefonos['laura']=654882761>>> telefonos

    {'laura': 654882761, 'juan': 628394756, 'pedro': 6385927583L, 'ana': 652947583, 'maria': 623774135}>>> telefonos.keys()

    ['laura', 'juan', 'pedro', 'ana', 'maria']

    >>> telefonos.values()

  • 8/7/2019 ANALISIS DEL LENGUAJE PYTHON

    10/27

    [654882761, 628394756, 6385927583L, 652947583, 623774135]>>> telefonos.has_key('javier')

    False>>> for k,l in telefonos.iteritems():

    ... print k,l

    ...

    laura 654882761juan 628394756

    pedro 6385927583ana 652947583

    maria 623774135

    3. Control de flujo

    Como todos los lenguajes modernos, Python tiene estructuras tpicas de control deflujo, como las estructuras if, los bucles y algunas otras sentencias que sirven paracontrolar el transcurso de los programas. Para agrupar las diferentes estructuras no seutilizan palabras reservadas para definir los lmites de la estructura, sino que seutilizar el sangrado para ello. Esto tiene la ventaja de que se puede leer mucho mejorel cdigo, pero como gran desventaja es que para los programadores noveles puedeser un problema y pueden tener muchos errores de ejecucin debido a esto.

    a) Sentencias ifLas sentencias if son casi idnticas al resto de los lenguajes. Vemos

    algunos ejemplos de ellas

    Ejemplo: Estructuras if

    >>> x=int (raw_input ("Introducir un numero: "))

    >>> #Esta opcin nos muestra un cuadro en el que tenemos que introducir un numero (introducimos el 4)

    >>> if x >= 0:... if x == 0:

    ... print 'Cero'

    ... elif x == 1:

    ... print 'Uno'

    ... elif x == 2:

    ... print 'Dos'

    ... else:

    ... print 'Mas de dos'

    ...

    Mas de dos

    Cabe resear que la estructura de las sentencias if se forma con el estilo:

    if_stmt: "if" expresion ":" cuerpo("elif" expresion ":" cuerpo)*

    ["else" ":" cuerpo]

  • 8/7/2019 ANALISIS DEL LENGUAJE PYTHON

    11/27

    b) Sentenciasfor/whileAl igual que el resto de lenguajes, los bucles son parte fundamental del

    lenguaje Python. Los bucles en Python son normalmente usados para el recorrido enlas listas, aunque tambin puede ser usados con valores. Para usar los valores seutiliza la sentencia range que lo que hace es crear una lista de nmeros. Veamos los

    ejemplos

    Ejemplo: Sentencia range

    >>> range (1, 10)[1, 2, 3, 4, 5, 6, 7, 8, 9]

    >>> range (1, 10, 2)

    [1, 3, 5, 7, 9]

    >>> range (0, 10 ,2)[0, 2, 4, 6, 8]

    >>> range (-10, 10, 2)

    [-10, -8, -6, -4, -2, 0, 2, 4, 6, 8]>>> range (-10, -20, 2)

    []

    >>> range (-10, -20, -2)[-10, -12, -14, -16, -18]

    >>> range (-10, 10, 3)[-10, -7, -4, -1, 2, 5, 8]

    Ejemplo: Sentenciafor

    x= ['Universidad' , 'de' , 'las' , 'Palmas' , 'de' , 'Gran', 'Canaria']

    >>> x['Universidad', 'de', 'las', 'Palmas', 'de', 'Gran', 'Canaria']

    >>> #Se pueden usar las listas completas>>> for a in x:

    ... print a

    ...

    Universidadde

    lasPalmas

    de

    GranCanaria>>> #O se pueden usar partes de las listas

    >>> for a in x[:4]:... print a

    ...Universidad

    delas

    Palmas

    >>> for a in x[3:]:

    ... print a

    ...

    Palmas

  • 8/7/2019 ANALISIS DEL LENGUAJE PYTHON

    12/27

    deGran

    Canaria>>> #tambin se puede crear una lista numrica para recorrerla

    >>> for a in range (0,10):

    ... print a

    ...0

    12

    3

    4

    56

    78

    9

    La sentencia que define los buclesfores la siguiente:

    for_stmt: "for" variable_local "in" lista ":" cuerpo

    ["else" ":" cuerpo]

    Ejemplo: Sentencias while

    >>> while a != 10:

    ... print a

    ... a=a+1

    ...0

    12

    3

    4

    56

    78

    9

    La definicin de la sentencia while se hace de la forma

    while_stmt: "while" expresion ":" cuerpo["else" ":" cuerpo]

    c) Sentencias break, continue ypass

    La sentencia breakse utiliza como en otros lenguajes para detener un bucle cuando sedesee dentro del propio bucle.

    La sentencia continue se utiliza para pasar a la siguiente iteracin de un bucle sin quese llegue al final del bucle, de forma que no se ejecute la ltima parte del bucle.

  • 8/7/2019 ANALISIS DEL LENGUAJE PYTHON

    13/27

    La sentenciapass no hace nada, sino que se usa para rellenar aquellos huecos debucles o sentencias ifque no tengan nada.

    4. Definicin de funciones

    Esta claro que en todos los lenguajes modernos pueden crear funciones de forma quepuedan llamar a una serie de lneas de cdigo desde cualquier parte del cdigo denuestro programa. Esto tiene la ventaja de no tener que escribir varias veces el mismocdigo, sobre todo si este cdigo es repetitivo y muy largo. En Python es posibledefinir funciones que devuelvan un valor. Veamos el ejemplo de la declaracin defunciones

    Ejemplo: Definicin de funciones

    def Confirmar (indicador, intentos = 4):

    ... while True:

    ... respuesta = raw_input (indicador)

    ... if respuesta in ('s', 'si'):

    ... return True

    ... elif respuesta in ('n', 'no'):

    ... return False

    ... if intentos < 0:

    ... print 'Usuario rechazado'

    ... return False

    ...

    >>> Confirmar ('Salir?')

    Esta funcin por ejemplo nos pedira confirmacin de alguna operacin. En caso deresponder 'si' se saldra del programa con un True. En caso de responder 'no' sesaldra del programa pero con un False.

    Al igual que ADA, por ejemplo, se puede definir una funcin e introducir una palabraclave, o el valor directo de los parmetros, o bien combinarlos ambos. Veamos unejemplo

    Ejemplo: funcin con palabras clave>>> def Animal (raza, peso, tamano, edad):

    ... print " Se trata de un", raza,

    ... print " que pesa aproximadamente ", peso, " kilos."

    ... print " Mide ", tamano, " centimetros, y tiene ", edad, " aos"

    ...

    >>> #Se puede llamar sin palabra clave

    >>> Animal ('perro',20,60,2)Se trata de un perro que pesa aproximadamente 20 kilos.

    Mide 60 centimetros, y tiene 2 aos>>> #Se puede llamar con unos con palabra clave y otros no

    >>> Animal ('perro', edad=2, tamano=60, peso=20)

  • 8/7/2019 ANALISIS DEL LENGUAJE PYTHON

    14/27

    Se trata de un perro que pesa aproximadamente 20 kilos.Mide 60 centimetros, y tiene 2 aos

    >>> #Sin embargo una vez se usa una palabra clave se debe usar en el resto de argumentos>>> Animal (raza='perro',2,60,20)

    Traceback ( File "", line 1

    SyntaxError: non-keyword arg after keyword arg (, line 1)

    Tras las primeras versiones de Python, se decidi introducir una caracterstica de Lispque permite crear pequeas funciones annimas mediante la palabra lambda quedespus permite ir ejecutando ese pequeo cdigo

    Ejemplo: Funciones lambda

    >>> f=lambda x: x+1>>> f(1)

    2>>> f(3)

    4

    >>> g=lambda x: x+x

    >>> g(4)8

    >>> g(10)20

    5. Mdulos

    Al no ser Python un lenguaje como C o ADA, en el que se tiene quecrear un fichero que contenga al cdigo para compilarlo, Python ofrece la posibilidadde ir probando pequeas lneas de cdigo en el intrprete de comandos. Sin embargo,cuando salimos de Python, esas pequeas lneas se eliminan, y si queremos ejecutarde nuevo lo mismo o enviarlo a alguien, no podramos. Es por ello que Pythonincorpora la capacidad de guardar mdulos para poder guardar aquellas funciones quehayamos hecho y despus ejecutarlas en el intrprete.Los mdulos se crean en cualquier editor de textos (las distribuciones de interpretesde Python suelen traer un pequeo editor, pero vale cualquiera. Aun as siempre es

    preferible uno con sangrado automtico para evitar errores), siempre con la extensin.py y despus son importados desde la lnea de cdigos para hacer referencia aellos.

    Hay que remarcar que si se hace un uso de un modulo y hay que cambiarlo, se debevolver a importar el modulo de la forma reload(nombre) o de la forma

    del(nombre)import(nombre)

  • 8/7/2019 ANALISIS DEL LENGUAJE PYTHON

    15/27

    Ejemplo: Uso de mdulos

    #Ejemplo de como definir mdulos#modulo ejemplo.py

    def Suma(x,y): #Sumaremos dos listas de igual tamano

    resultado =[]for a in x:

    for b in x:if a == b:

    resultado.append(x[a]+y[b])elif a != b:

    pass

    else:

    passprint resultado

    def Resta (x,y): #Restaremos dos listas de distinto tamano

    resultado =[]

    for a in x:for b in x:

    if a == b:resultado.append(x[a]-y[b])

    elif a != b:

    pass

    else:pass

    return resultado

    >>> import ejemplo

    >>> x=[a for a in range (0,10)]>>> y=[3*b for b in range (0,10)]

    >>> x[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

    >>> y[0, 3, 6, 9, 12, 15, 18, 21, 24, 27]

    >>> ejemplo.Suma(x,y)[0, 4, 8, 12, 16, 20, 24, 28, 32, 36]

    >>> ejemplo.Resta(x,y)[0, -2, -4, -6, -8, -10, -12, -14, -16, -18]

    >>> #El return dentro de la funcin nos proporciona la siguiente utilidad>>> a=ejemplo.Suma(x,y)

    [0, 4, 8, 12, 16, 20, 24, 28, 32, 36]>>> a

    >>> a=ejemplo.Resta(x,y)

    >>> a

    [0, -2, -4, -6, -8, -10, -12, -14, -16, -18]

    En el caso de no querer estar llamando continuamente al modulo para llamar a lafuncin, sino simplemente llamar a la funcin, existe la posibilidad de hacer losiguiente

  • 8/7/2019 ANALISIS DEL LENGUAJE PYTHON

    16/27

    Ejemplo: Uso de mdulos sin hacer la referencia en cada funcin

    >>> from ejemplo import Suma

    >>> Suma(x,y)[0, 4, 8, 12, 16, 20, 24, 28, 32]

    >>> Resta(x,y) #Ocasiona un error al haberlo llamado sin importarlo

    Traceback (most recent call last):File "", line 1, in

    NameError: name 'Resta' is not defined

    >>> from ejemplo import Resta>>> Resta(x,y)

    [0, -2, -4, -6, -8, -10, -12, -14, -16]

    >>> del Suma

    >>> del Resta>>> from ejemplo import * #Con un asterisco se pueden importar todas las funciones de un modulo

    >>> Suma(x,y)[0, 4, 8, 12, 16, 20, 24, 28, 32]

    >>> Resta(x,y)

    [0, -2, -4, -6, -8, -10, -12, -14, -16]

    Una de las herramientas que podemos usar con los mdulos es la sentencia dir(). Estanos permite explorar los mdulos de forma que sepamos lo que contiene cada uno.Hagamos un dir() al modulo creado

    >>> import ejemplo>>> dir (ejemplo)

    ['Resta', 'Suma', '__builtins__', '__doc__', '__file__', '__name__']

    Vemos que aparte de nuestras funciones, existe tambin '__builtins__' que contienelos paquetes de construccin del modulo. '__doc__' que contiene la documentacindel mdulo. '__file__' que nos especifica el fichero del modulo. Y por ultimo'__name__' que nos proporciona el nombre del modulo.

    a) Paquetes

    Los paquetes son tambin de gran utilidad en Python. Agrupa una serie de mdulosde forma que haciendo referencia a ese paquete se pueda obtener el modulo deseado.

    Por ejemplo, en caso de tener una serie de ficheros .py y querer agruparlos en unpaquete, se podra hacer la siguiente asignacin de directorios

    #Implementacin de un paquetePython/

    __init__.py

    Ejemplos/

    __init__.pyejemplo1.py

    ejemplo2.pyejemplo3.py

    Ficheros/

    __init__.py

    fichero1.py

  • 8/7/2019 ANALISIS DEL LENGUAJE PYTHON

    17/27

    fichero2.pyfichero3.py

    >>> #La llamada a uno de los paquetes seria por ejemplo

    >>> import Python.Ejemplos.ejemplo2

    >>> #Y la referencia tambin se hara

    >>> Python.Ejemplos.ejemplo2()

    Vemos que en cada directorio existe el archivo __init__.py. Este archivo esobligatorio ponerlo aunque solo sea un fichero vaco, ya que con este, Python trata aldirectorio como un paquete. Sin embargo es muy til incluir dentro de cada uno deesos ficheros la sentencia__all__=[ejemplo1,ejemplo2,ejemplo3] (este es

    para el directorio de ejemplos), ya que con esto conseguiramos que al ejecutar lasentencia >>>from Python.Ejemplos import * nos importase los tres mdulos enconjunto.

    6. Entrada y salida de ficheros

    Python puede trabajar con ficheros externos, tanto escribirlos como leerlos y ademscon algunas opciones que le dan bastante potencia.A la hora de abrir un fichero se hara por ejemplo lo siguiente:

    >>> f=open('C:\prueba.txt', 'r')

    >>> print f

    Comprobamos que hemos abierto con modo 'r' que implica solo lectura. tambin esposible abrir de modo 'w' de escritura, 'a' para aadir datos al final del fichero, ydespus tambin hay posibilidad de escribir modo 'b' para datos binarios. Si ahoraqueremos leer el fichero que acabamos de abrir lo haramos de forma:

    >>> f.read()'Este es el contenido de un fichero de prueba'

    Tambin podramos leer hasta que se comprueba que se encuentra el carcter \n de

    nueva lnea para leer lnea a lnea. Cada vez que se ejecuta el comando readline() selee la siguiente lnea.

    >>> f.readline()'primera lnea de fichero\n'

    >>> f.readline()'segunda lnea de fichero'

    >>> f.readline()

    ''

    Siguiendo con las opciones de lectura, la opcin tellindica en nmero de bytes laposicin en la que se encuentra el desplazamiento del fichero que vamos recorriendo

  • 8/7/2019 ANALISIS DEL LENGUAJE PYTHON

    18/27

    >>> f=open ("C:\prueba.txt", 'r')>>> f.tell()

    0L>>> f.readline()

    'primera lnea de fichero\n'

    >>> f.tell()

    26L>>> f.readline()

    'segunda lnea de fichero\n'>>> f.tell()

    52L

    Si queremos modificar esa posicin para situarnos en algn sitio exacto, podemosusar la opcinseek(desplazamiento, origen) siendo la opcin desplazamientoobligatoria mientras que el origen es opcional, ya que si no se pone se supondr elorigen el inicio del fichero. Si se escribe un 1 ser la posicin actual, y si se escribe

    un 2 ser el fin del fichero>>> f=open ("c:\prueba.txt", 'r')

    >>> f

    >>> f.tell()

    0L

    >>> f.readline()'primera lnea de fichero\n'

    >>> f.tell()26L

    >>> f.seek(5)

    >>> f.readline()

    'ra lnea de fichero\n'>>> f.seek(-10,2)

    >>> f.tell()91L

    >>> f.readline()

    'de fichero'

    Por supuesto, cuando no se quiera seguir utilizando el fichero se utilizara la directivaclose

    >>> f.close()>>> f.read()

    Traceback (most recent call last):File "", line 1, in

    ValueError: I/O operation on closed file

    En caso de querer utilizar cadenas de caracteres es muy sencillo hacer lasoperaciones. Cuando se utilizan nmeros se pueden hacer cambios con la directivaint() para transformar las strings a numero. Sin embargo si queremos guardar datos

    mas complejos, como diccionarios o tuplas, existe una directiva muy potente llamadapickle() que introduce cualquier dato complejo en un fichero. Esto se puede ver en elsiguiente ejemplo

  • 8/7/2019 ANALISIS DEL LENGUAJE PYTHON

    19/27

    >>> x={'nombre': 'juan', 'telefono': 3342563}>>> x

    {'nombre': 'juan', 'telefono': 3342563}

    >>> f=open("C:\prueba2.txt",'w')>>> import pickle

    >>> pickle.dump(x,f)>>> f.readline()

    'em(inst.__dict__, key, value) in a\n'

    >>> y=pickle.load(f)

    >>> y{'nombre': 'juan', 'telefono': 3342563}

    Para mas usos de los ficheros y del modulopickle, leer las bibliotecas de los mdulos.

    7. Manejo de excepciones

    Otra de las opciones del lenguaje Python es controlar las excepciones y los errores deejecucin. Para ello, se ofrecen unas directivas que capturan las excepciones, o laselevan. Por ejemplo, veamos el error que se produce en la siguiente sentencia:

    >>> x=int(raw_input("Introduce un numero: "))

    Traceback (most recent call last):

    File "", line 1, in ValueError: invalid literal for int() with base 10: 'a'

    Comprobamos que se eleva la excepcin ValueError. En caso de querer capturar laexcepcin y seguir pidiendo el nmero se hace lo siguiente:

    >>> while True:

    ... try:

    ... x= int (raw_input("Introduce un numero: "))

    ... break

    ... except ValueError:

    ... print "Eso no es un numero. Intntalo de nuevo"

    ...

    Eso no es un numero. Intntalo de nuevo

    Eso no es un numero. Intntalo de nuevo>>> x

    4

    Observamos que la sentencia try se utiliza para despus declarar las excepciones. Sepueden utilizar varias excepciones en cadena e incluso se puede utilizar unaexcepcin genrica para los casos que no se hayan contemplado. Por ejemplo

    >>> while True:

    ... try:

    ... x= int (raw_input("Introduce un numero: "))

    ... y=1/x

    ... z=x+1

    http://c/prueba2.txthttp://c/prueba2.txt
  • 8/7/2019 ANALISIS DEL LENGUAJE PYTHON

    20/27

    ... break

    ... except ZeroDivisionError:

    ... print "No puedes dividir por cero"

    ... except ValueError:

    ... print "Debes utilizar un numero"

    ... except:

    ... "Error desconocido. Intntalo de nuevo"...

    Debes utilizar un numeroDebes utilizar un numero

    No puedes dividir por cero

    Cuando salta una excepcin tambin se puede acompaar de los argumentos que sedesee. as podemos tener ms datos del error que se ha producido. Vemos el siguienteejemplo:

    >>> try:

    ... raise Exception ('Nombre', 'Incorrecto')

    ... except Exception, inst:

    ... print inst

    ... x,y=inst

    ... print 'Error debido a un ', x, y

    ...

    ('Nombre', 'Incorrecto')Error debido a un Nombre Incorrecto

    En caso de no querer hacer nada despus de que salte la excepcin sino determinar

    que salto una excepcin, lo mejor es relanzarla de la forma:>>> try:

    ... raise NameError, 'Error grave'

    ... except NameError:

    ... print 'Ha saltado una excepcin'

    ... raise

    ...

    Ha saltado una excepcin

    Traceback (most recent call last):

    File "", line 2, in

    NameError: Error grave

    Tambin se pueden definir las propias excepciones. Para ello se crean la clase base ylas diferentes clases derivadas de cada una de las excepciones. Veremos eso en el

    prximo tema.

    Por ultimo, se puede generar una accin de limpieza que se ejecute tanto si se ejecutala excepcin como si no. Esto se hara de la forma:

    >>> try:

    ... raise KeyboardInterrupt

    ... finally:

    ... print 'Adios, nos vamos del programa'

  • 8/7/2019 ANALISIS DEL LENGUAJE PYTHON

    21/27

    ...Adios, nos vamos del programa

    Traceback (most recent call last):File "", line 2, in

    KeyboardInterrupt

    8. Clases

    Al igual que los lenguajes ms modernos, el lenguaje Python introduce opciones detrabajar con clases. Esto proporciona una gran potencia de los nuevos lenguajes, yque permite muchas variantes en los programas. Vemos como podemos definir unaclase

    >>> class Ejemplo:

    ... "Clase ejemplo"

    ... #Definimos las variables

    ... numero=1

    ... #Definimos las funciones

    ... def f(self):

    ... return 'Hola mundo'

    ... def g(self,x):

    ... print x

    ...

    >>> a=Ejemplo()

    >>> a.f()'Hola mundo'

    >>> a.g(a.numero)

    1

    Cuando una clase define un mtodo__init__, se puede obtener una nueva instanciaque permite una mayor flexibilidad de trabajo con las clases. Por ejemplo:

    >>> class Complejo:

    ... def __init__ (self, Real, Imag):

    ... self.r = Real

    ... self.i = Imag

    ...>>> x = Complejo (2.0, 5.0)

    >>> x.r, x.i(2.0, 5.0)

    a) Objetos instancias y objetos mtodos

    Otra de las posibilidades que tiene Python es utilizar los objetos instancias y objetosmtodos.Recordamos que la instanciacin es llevar a una variable la declaracin de una clase(Ej:x = Clase()). Python proporciona que se pueda crear una variable dentro de la

    clase y hacerla desaparecer con la misma rapidez. Son los llamados objetosinstancias. Estos objetos son bastante peligrosos pues si se hace mala referencia aellos pueden hacer que una clase crezca de manera ilimitada.

  • 8/7/2019 ANALISIS DEL LENGUAJE PYTHON

    22/27

    Ejemplo:

    >>> class MiClase:... i=1

    ... def f(self):

    ... print "Hola Mundo"

    ...>>> x=MiClase()

    >>> x

    >>> x.contador = 1>>> x

    >>> while x.contador < 10:

    ... x.contador = x.contador * 2

    ...

    >>> print x.contador

    16>>> del x.contador

    >>> x.contador

    Traceback (most recent call last):File "", line 1, in

    AttributeError: MiClase instance has no attribute 'contador'

    En cuanto a los objetos mtodo, normalmente se llaman de la forma clase.metodo. Eneste caso, podemos hacer referenciar a un objeto un mtodo, de forma que despus

    podamos llamar al objeto y se referencie directamente a ese mtodo.

    Ejemplo:

    >>> xmetodo = x.f

    >>> i=1>>> while i

  • 8/7/2019 ANALISIS DEL LENGUAJE PYTHON

    23/27

    un fcil ejemplo:

    >>> class Tabaiba:... especie = 'planta'

    ... def leer(self, especie):

    ... print especie

    ...>>> class TabaibaDulce(Tabaiba):

    ... tipo = 'dulce'

    ... def leerdulce (self, especie, tipo):

    ... print especie, tipo

    ...

    >>> class TabaibaAmarga(Tabaiba):

    ... tipo = 'amarga'

    ... def leeramarga(self, especie, tipo):

    ... print especie, tipo

    ...

    >>> x=Tabaiba()>>> y=TabaibaDulce()

    >>> z=TabaibaAmarga()

    >>> x.leer(x.especie)planta

    >>> y.leerdulce(y.especie,y.tipo)planta dulce

    >>> z.leeramarga(z.especie, z.tipo)

    planta amarga

    Cabe destacar que Python tambin ofrece herencia de mltiples clases padres. Un

    ejemplo sera:

    >>> class LuchaCanaria:... movimiento='maa: '

    ... def leer (self,movimiento):

    ... print movimiento

    ...>>> class Cogida:

    ... tipo='cogida de '

    ... def leer (self, tipo):

    ... print tipo

    ...>>> class Muslo:... zona = 'muslo'

    ... def leer (self, zona):

    ... print zona

    ...

    >>> class Cogidademuslo(LuchaCanaria, Cogida, Muslo):

    ... x=LuchaCanaria()

    ... y=Cogida()

    ... z=Muslo()

    ... def leertodo(self,movimiento,tipo,zona):

    ... print movimiento,tipo,zona...

    >>> h=Cogidademuslo()>>> h.leertodo(h.x.leer(h.movimiento),h.y.leer(h.tipo), h.z.leer(h.zona))

  • 8/7/2019 ANALISIS DEL LENGUAJE PYTHON

    24/27

    maa:cogida de

    musloNone None None

    Vemos que en este caso, lo que se pasa a h.leertodo son las funciones de imprimir,

    por lo que nos viene en diferentes lneas. Cabe resaltar una cosa: Si existen variasfunciones llamadas iguales en las diferentes clases, hay que hacer referencia a queclase procede (en el ejemplo h.x.leer, h.y.leer, ...), pero si solo existe una funcin, se

    puede llamar directamente. Sin embargo, en caso de quererlo todo en una lnea, loque hacemos es pasarle los parmetros directamente

    >>> h.leertodo(h.movimiento,h.tipo,h.zona)maa: cogida de muslo

    c)Variables pblicas y privadas

    Al igual que en otros lenguajes, Python proporciona la posibilidad de declararvariables de tipo privado. Para ello, las variables deben declararse con dos guiones

    bajos al inicio del nombre. El resto de variables pblicas se declaran de formanatural. Por ejemplo:

    >>> class Potaje:... __potaje='que rico'

    ... comer ='am'

    ... def leer(self,var1,var2):

    ... print var1, var2

    ...

    >>> p.leer(p.comer,p.__potaje)Traceback (most recent call last):

    File "", line 1, in AttributeError: Potaje instance has no attribute '__potaje'

    Observamos que entonces solo se puede hacer referencia a esta variable privada en elinterior de la clase

    >>> class Potaje:... __potaje='que rico'

    ... comer ='am'

    ... def leer(self,var1):

    ... print var1, self.__potaje

    ...

    >>> p=Potaje()>>> p.leer(p.comer)

    am que rico

    Por ultimo comentar sobre las clases dos cosas ms. La primera es que puede crearse

    una clase que funcione como un recorden ADA o como unstructen C. Un ejemplosera:

  • 8/7/2019 ANALISIS DEL LENGUAJE PYTHON

    25/27

    >>> class Agenda:... pass

    ...>>> juan=Agenda()

    >>> juan.nombre='Juan'

    >>> juan.telefono='928663557'

    >>> print "%s: %s" % (juan.nombre, juan.telefono)Juan: 928663557

    La otra cosa a comentar es recordar del capitulo anterior que las excepciones tambinson clases. as que, podemos definir nuestras propias excepciones de la siguienteforma:

    >>> class ErrorTipo(Error):

    ... def __init__ (self, expresion, mensaje):

    ... self.expresion=expresion

    ... self.mensaje=mensaje

    >>> err_type=ErrorTipo('Atencion','Error en el tipo de datos')>>> try:

    ... raise err_type

    ... except ErrorTipo:

    ... print err_type.expresion,err_type.mensaje

    ...

    Atencion Error en el tipo de datos

    Con esto queda explicado Python bsico. A continuacin, el ltimo tema se va adedicar a libreras de gran uso que nos pueden ser de utilidad al estar programando enPython.

    9. libreras interesantes

    a) Modulo osEl modulo os nos proporciona intercambio de datos con el sistema operativo. Porejemplo:

    >>> import os>>> os.getcwd()'C:\\Python25'

    >>> os.mkdir('C:\Python25\Ejemplosmios')

    >>> os.chdir('C:\Python25\Ejemplosmios')

    >>> os.getcwd()'C:\\Python25\\Ejemplosmios'

    b) Patrones de cadenasSi queremos buscar patrones en diferentes cadenas de caracteres, el modulo re nos

    permite hacerlo. Por ejemplo:>>> import re

    >>> re.findall(r'\bq[a-z]*','de que quieres que me queje')

  • 8/7/2019 ANALISIS DEL LENGUAJE PYTHON

    26/27

    ['que', 'quieres', 'que', 'queje']

    c) Modulo randomEl modulo random nos permite hacer elecciones aleatorias en nuestros programas.Por ejemplo:

    >>> import random>>> random.choice(['manzana','pera','pia'])

    'pia'

    >>> random.sample(xrange(100),10) #Muestreamos diez veces de un rango de 100 nmeros

    [64, 10, 29, 61, 91, 90, 83, 13, 34, 52]>>> random.randrange(6) #Muestreamos una vez de un rango de 6

    3

    d) Acceso a internet

    Si queremos acceder a internet, hay dos mdulos bsicos. Uno es el de obtener laURL y otro es para enviar correo electrnico. Por ejemplo:

    >>>import urllib2>>> for lnea in urllib2.urlopen('http://www.iuma.ulpgc.es/users/jmiranda'):

    ... if 'Javier' in lnea:

    ... print lnea

    ...

    Javier Miranda's Ada Corner

    Javier Miranda's Ada Corner

    Author: Javier MirandaJavier Miranda was born in 1965 in Canary Islands (Spain). He studied

    Javier Miranda

    >>> import smtplib>>> servidor = smtplib.SMTP('localhost')

    >>> servidor.sendmail('[email protected]', '[email protected]',"""To: [email protected]

    From: [email protected]

    Hola.""")

    >>> server.quit()

    e) Fecha y horatambin existe un paquete que permite trabajar con fechas y horas. Por ejemplo

    >>> from datetime import date>>> ahora=date.today()

    >>> ahora

    datetime.date(2007, 5, 14)

    >>> import time>>> time.ctime()

    'Mon May 14 23:40:46 2007'>>> time.localtime()

    (2007, 5, 16, 17, 25, 58, 2, 136, 1)

  • 8/7/2019 ANALISIS DEL LENGUAJE PYTHON

    27/27

    f) Compresion de datosPor ultimo vamos a ver un modulo que comprime y descomprime datos. Se trata delmodulozlib, aunque existen algunos ms. Un ejemplo de este mdulo sera:

    >>> import zlib>>> cadena ='Cadena cadena cadena cadena'

    >>> len (cadena)27

    >>> compresion=zlib.compress(cadena)

    >>> len (compresion)

    18>>> zlib.decompress(compresion)

    'Cadena cadena cadena cadena'

    Con esto terminamos el manual bsico del lenguaje Python. Para ms informacin, se

    agrega el apartado 10 con pginas de referencia donde aprender todo sobre estelenguaje.

    10. Referencias bibliogrficas

    Manual completo ms mucha informacion:http://pyspanishdoc.sourceforge.net

    Toda la documentacin:http://docs.python.org/

    Coleccin completa de libreras de Pythonhttp://www.python.org/pypi/

    Libro Dive into Pythonhttp://almacen.gulic.org/diveintopython-5.4-es/toc/

    Otra introduccin a Pythonhttp://users.servicios.retecal.es/tjavier/archivos/IntroduccionPython.pdf

    introduccin a Python muy tilhttp://es.tldp.org/Tutoriales/Python/tut.pdf

    Ms Pythonhttp://users.servicios.retecal.es/tjavier/python/intpython/index.html

    Pagina de la librera Pygame que permite crear juegos en Pythonhttp://www.pygame.org

    libreras de Pythonhttp://docs.python.org/lib/lib.html

    Pagina de las libreras RDFLib para Python para trabajar los RDFhttp://rdflib.net

    Distribuciones del intrpretehttp://python.org/download/

    http://pyspanishdoc.sourceforge.net/http://docs.python.org/http://www.python.org/pypi/http://almacen.gulic.org/diveintopython-5.4-es/toc/http://users.servicios.retecal.es/tjavier/archivos/IntroduccionPython.pdfhttp://es.tldp.org/Tutoriales/Python/tut.pdfhttp://users.servicios.retecal.es/tjavier/python/intpython/index.htmlhttp://www.pygame.org/http://docs.python.org/lib/lib.htmlhttp://rdflib.net/http://python.org/download/http://pyspanishdoc.sourceforge.net/http://docs.python.org/http://www.python.org/pypi/http://almacen.gulic.org/diveintopython-5.4-es/toc/http://users.servicios.retecal.es/tjavier/archivos/IntroduccionPython.pdfhttp://es.tldp.org/Tutoriales/Python/tut.pdfhttp://users.servicios.retecal.es/tjavier/python/intpython/index.htmlhttp://www.pygame.org/http://docs.python.org/lib/lib.htmlhttp://rdflib.net/http://python.org/download/