analisis del lenguaje python
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/