Documentos de Académico
Documentos de Profesional
Documentos de Cultura
El Lenguaje Python
El Lenguaje Python
Python
David Masip Rod
PID_00174138
Los textos e imgenes publicados en esta obra estn sujetos excepto que se indique lo contrario a
una licencia de Reconocimiento-NoComercial-SinObraDerivada (BY-NC-ND) v.3.0 Espaa de
Creative Commons. Podis copiarlos, distribuirlos y transmitirlos pblicamente siempre que citis
el autor y la fuente (FUOC. Fundaci per a la Universitat Oberta de Catalunya), no hagis un uso
comercial y no hagis una obra derivada. La licencia completa se puede consultar en
http://creativecommons.org/licenses/by-nc-nd/3.0/es/legalcode.es
CC-BY-NC-ND PID_00174138
El lenguaje Python
ndice
Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.
Instalacin de Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.
Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.
Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.
Cadenas de caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
Control de flujo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
3.1.
12
3.1.1.
Sentencias if-elif-else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
13
3.2.1.
14
3.2.2.
while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
4.1.
Parmetros de entrada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
4.2.
Valores de retorno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
20
5.1.
Tuplas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
5.2.
Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
5.3.
Diccionarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
5.4.
Conjuntos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
5.5.
Ficheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
5.5.1.
Ficheros de texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
27
6.1.
27
6.1.1.
3.
3.2.
4.
5.
6.
7.
28
6.2.
Herencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
6.3.
Encapsulacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
6.4.
Polimorfismo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
32
7.1.
Funciones lambda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
7.2.
Comprensin de listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
CC-BY-NC-ND PID_00174138
8.
El lenguaje Python
35
8.1.
NumPy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
8.2.
PyLab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
8.3.
SciPy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
Ejercicios de autoevaluacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38
Bibliografa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
CC-BY-NC-ND PID_00174138
Introduccin
El lenguaje Python
CC-BY-NC-ND PID_00174138
Objetivos
Los objetivos que el alumno debe de haber conseguido una vez estudiados los
contenidos de este mdulo son los siguientes:
El lenguaje Python
CC-BY-NC-ND PID_00174138
El lenguaje Python
1. Instalacin de Python
.
Existen actualmente mltiples implementaciones del lenguaje Python, en funcin del lenguaje base en el que se ha construido el intrprete. La ms conocida es CPython, o simplemente Python, que ha sido implementada en lenguaje
C. Otras opciones disponibles son: IronPython (codificada en C#) o JPython
(codificada en JAVA).
Para instalar una determinada versin de Python, aconsejamos recurrir a su si-
* http://www.python.org/
tio web oficial*. En el momento de escribir estos manuales, esta URL contiene
toda la informacin necesaria para instalar el entorno. En la seccin de descargas** se pueden obtener los ltimos paquetes de instalacin para Windows,
Linux y MacOS X en sus distintas versiones.
Una vez obtenido el paquete para el sistema operativo y versin adecuados,
ejecutaremos el instalador, y en una lnea de comandos ejecutaremos el intrprete de Python, y probaremos que todo funciona correctamente mediante el
clsico Hello World.
** http://www.python.org
/download/
CC-BY-NC-ND PID_00174138
El lenguaje Python
* http://pydev.org/
** http://sourceforge.net
/projects/spe/
*** http://www.wingware.com/
CC-BY-NC-ND PID_00174138
2. Variables
.
Los tipos bsicos del lenguaje Python son esencialmente los ya conocidos en
cualquier lenguaje de programacin: los valores numricos, las cadenas de
texto, y los valores booleanos. En el cdigo 2.1 se muestra un ejemplo de cada
tipo.
Cdigo 2.1: Ejemplos de uso de variables
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# E j e m p l o s de v a r i a b l e s
a =42;
#valor entero
along = 42L ; # v a l o r e n t e r o l o n g (32 64 b i t s en f u n c i n de l a p l a t a f o r m a )
ahex = 0x2a ; #a en en n o t a c i n hexadecimal
a o c t a l = 052; #a en n o t a c i n o c t a l
b = 3.1416; # v a l o r en coma f l o t a n t e
bnotacion = 3.14 e0 ;
c = 3 + 7 j ; #Python s o p o r t a nmeros c o m p l e j o s
d = " Ejemplo de cadena de c a r a c t e r e s " #Una cadena de c a r a c t e r e s
#Imprimir l a s v a r i a b l e s por pantalla
print a , b , c , d ;
# t i p o de l a s v a r i a b l e s
type ( a ) ;
type ( b ) ;
type ( c ) ;
type ( d ) ;
Los nmeros enteros se pueden representar en notacin decimal, octal (anteponiendo un 0 al valor) o hexadecimal (anteponiendo 0x al valor). Al
igual que en lenguaje C (en el que est escrito Python), los nmeros se pueden
representar mediante enteros (por defecto) o long (entero largo), que permite
un rango mayor de valores posibles. Este rango, de nuevo como en C, depender de la plataforma subyacente, pudiendo ser de 32 o 64 bits.
Los valores flotantes son implementados a bajo nivel directamente con el tipo
double de C (registro de 64 bits). Por su parte, los nmeros complejos estn
soportados de base y en la prctica se implementan mediante dos flotantes,
uno para la parte real y otro para la parte imaginaria.
2.1. Operadores
Los operadores que soporta el lenguaje Python son los clsicos de cualquier
lenguaje de programacin. Las tablas 1 y 2 muestran un resumen con ejemplos
de estas operaciones. Adems, Python provee de extensiones para operaciones
ms complejas en el mdulo math.
El lenguaje Python
CC-BY-NC-ND PID_00174138
El lenguaje Python
10
Suma
Resta o negacin
Multiplicacin
Divisin
Mdulo
Divisin entera
Operador
//
Exponenciacin
**
Ejemplo
a=1+2
a = 2 5 o a = 3
a=23
a = 5,4/2
a = 5 %2
a = 5,8//2
a = 3 4
#a = 3
#a = 3
#a = 6
#a = 2,7
#a = 1
#a = 2,0
#a = 81
Operador
&
Desplazamiento a la
derecha
Ejemplo
a = 2&1
a = 2|1
a=31
a = 1
a=42
a=12
#a = 0(10&01)
#a = 3(10|01)
#a = 1
#a = 2
#a = 1
#a = 4
Nombre
Or
And
Xor
Not
==
!=
<
>
b = False or True
b = Not False
8 == 9
8! = 9
8<9
8>9
b ser True
False
True
True
False
Operador
And
Or
Ejemplo
Resultado
b ser False
# E j e m p l o s de cadenas
a =
b =
c =
sin
" hola\n"
" \ t E s t e es un ejempp\blo de cadenas de c a r a c t e r e s \n"
" " " Es p o s i b l e e s c r i b i r s a l t o s de l i n e a
necesidad de cdigos de escape . " " "
print a , b , c
>>>hola
CC-BY-NC-ND PID_00174138
11
12
13
14
15
16
17
18
19
20
El lenguaje Python
11
E s t e es un ejemplo de cadenas de c a r a c t e r e s
Es p o s i b l e e s c r i b i r s a l t o s de l i n e a
s i n necesidad de cdigos de escape .
d
e
f
g
=
=
=
=
a + b ; #concatenacin
" repite "
3e ;
#repeticin
e 3;
# e q u i v a l e n t e al caso a n t e r i o r
print d , f , g
Algunos operadores usados con valores numricos se encuentran sobrecargados en el caso de las cadenas de caracteres. Son ejemplos de ello la igualdad
(que asigna una cadena a una variable) y el operador suma +. La suma de
dos cadenas es el resultado de concatenar la segunda detrs de la primera. Del
mismo modo, el producto de una cadena por un escalar da por resultado la
misma cadena repetida tantas veces como indique el operador numrico.
Por ltimo, una funcin muy til en Python es str, que permite realizar la
Ejemplo
CC-BY-NC-ND PID_00174138
12
3. Control de flujo
.
Todos los lenguajes de programacin ponen a nuestra disposicin instrucciones de control de flujo. Estas instrucciones permiten al programador alterar el
orden secuencial del cdigo con el fin de permitir ejecutar diferentes rdenes
en funcin de una serie de condiciones sobre el estado. Python ofrece los dos
tipos bsicos de sentencias de control de flujo: las sentencias condicionales
y los bucles (o repeticiones).
# E j e m p l o s de uso de i f
c = 37;
if c > 0:
print " E l nmero es p o s i t i v o \n"
print "Que tenga un buen da \n"
# c o n t i n u a c i n d e l programa
.
Un detalle muy importante a observar en este ejemplo de cdigo es la
identacin. En Python los bloques de cdigo se delimitan mediante
una correcta tabulacin. A diferencia de otros lenguajes donde disponemos de palabras clave especficas (begin, end,...) o llaves ( {,..., }) reservadas para definir bloques de cdigo, en Python slo podemos usar
tabulacin.
El lenguaje Python
CC-BY-NC-ND PID_00174138
13
# E j e m p l o s de uso de i f
c = 10;
if c > 0:
print " E l nmero es p o s i t i v o \n"
print "Que tenga un buen da \n"
e l i f c == 0 :
print " E l nmero es exactamente 0 "
else :
print " E l nmero es negativo "
print "Que tenga s u e r t e "
# c o n t i n u a c i n d e l programa
El lenguaje Python
CC-BY-NC-ND PID_00174138
14
En el ejemplo del cdigo 3.3 podemos ver un uso tpico del bucle for para
recorrer un vector de datos.
Cdigo 3.3: Ejemplo de sintaxis de un bucle for...in
1
2
3
4
5
6
# E j e m p l o s de uso d e l b u c l e f o r
v e c t o r = [ " hola " , " buenos " , " d a s " ] ;
for palabra in v e c t o r :
print palabra
# imprimira todas las palabras del v e c t o r
.
Es importante destacar que el bucle for no se comporta exactamente
como estamos acostumbrados en la mayor parte de lenguajes de programacin. En Python, a cada paso del bucle se instancia el elemento
iterador con un valor de la secuencia de forma automtica.
3.2.2. while
El bucle while sigue un planteamiento mucho ms similar a los lenguajes de
programacin tradicionales. Este bucle nos permite ejecutar un determinado
bloque de cdigo mientras una determinada condicin sea cierta.
.
Su sintaxis es: while Condicin:
En el ejemplo del cdigo 3.4 se muestra un uso tpico del bucle while.
El lenguaje Python
CC-BY-NC-ND PID_00174138
15
# E j e m p l o s de uso d e l b u c l e f o r
pares = 2 ;
while pares <= 20:
print p ares
pares = pares + 2
# i m p r i m i r a t o d o s l o s nmeros p a r e s
El ejemplo imprime por pantalla todos los nmeros pares del 2 al 20. A cada paso incrementa la variable de control que nos permitir salir del bucle
cuando la condicin no sea satisfecha.
Notad que la sentencia while puede generar bucles infinitos. A veces estos
bucles se generan de forma involuntaria, lo cual va en detrimiento de la calidad de nuestros programas. Otras veces se generan de forma voluntaria, en
combinacin con la sentencia break. Esta sentencia permite salir de forma
incondicional de un bucle.
El cdigo 3.5 es equivalente al anterior, aunque mucho menos elegante. La
sentencia break sin embargo puede ser til cuando el flujo de ejecucin depende de alguna entrada del usuario no contemplada en el momento de ejecucin.
Cdigo 3.5: Ejemplo de sintaxis de un bucle while
1
2
3
4
5
6
7
8
9
# E j e m p l o s de uso d e l b u c l e f o r
pares = 2 ;
while pares > 0 :
print p ares
pares = pares + 2
i f pares > 20:
break
# i m p r i m i r a t o d o s l o s nmeros p a r e s
El lenguaje Python
CC-BY-NC-ND PID_00174138
16
El lenguaje Python
4. Funciones
.
Todos los lenguajes de programacin ofrecen mecanismos que permiten encapsular una serie de operaciones de forma parametrizable, y devolver unos resultados determinados. Estos fragmentos de cdigo se denominan funciones.
.
En Python las funciones se declaran mediante la palabra clave def. Su
sintaxis es:
def nombre_funcion(parametro1, parametro2, ..., parametroN):
A continuacin se escribe un salto de lnea y las operaciones asociadas a la funcin, como siempre con una identacin a la derecha (tabulacin) que indica
que este cdigo se corresponde a la funcin.
Una vez se ha definido la funcin, se puede llamar con distintos parmetros
dentro del cdigo.
.
La llamada o ejecucin de una funcin sigue la sintaxis: nombre_funcin(parametro1, parametro2,..., parametroN).
# E j e m p l o s de d e f i n i c i o n e s y llamadas de f u n c i o n e s
# Funcin p o t e n c i a de dos v a l o r e s ( usa como base e l p r i m e r p armetro
# y como e x p o n e n t e e l segundo parmetro )
def exponenciar ( parametro1 , parametro2 ) :
Delimitacin de cdigo
fuente
Hay que recordar que Python
no usa llaves ni palabras clave
para delimitar cdigo fuente.
CC-BY-NC-ND PID_00174138
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
17
En primer lugar notad que la tabulacin vuelve a jugar un papel clave. Para diferenciar el final de la definicin de la funcin y el resto de cdigo del
programa principal, basta con mirar el cdigo fuente por encima. La propia
identacin delimita claramente los bloques.
Tambin se puede observar una cadena inicial que empieza por . Estas cadenas se utilizan para documentar las funciones. Los programadores familiarizados con JAVA pueden ver cierto paralelismo con el doc usado en este lenguaje.
Al final de la definicin de la funcin se encuentran las llamadas. Es interesante observar las distintas formas de cmo se pueden parametrizar las funciones
en Python. El uso normal suele ser llamar a la funcin con los parmetros en
el mismo orden en que se ha definido la funcin. Sin embargo, se puede tambin llamar a la funcin con el nombre del parmetro y su valor asociado. De
este modo son posibles llamadas que se saltan la regla del orden como las del
ejemplo, donde encontramos exponenciar(parametro2=3, parametro1=2), que es
equivalente a exponenciar(2,3). Es importante destacar que Python obliga a llamar a las funciones usando exactamente el mismo nmero de argumentos, en
caso contrario se generar un error de ejecucin.
Existe tambin la posibilidad de inicializar parmetros con valores por defecto
en caso de que no se proporcione su valor en el momento de la llamada. La
funcin exponenciar2 muestra un ejemplo donde en caso de no proporcionar
un argumento utilizara un 2 por defecto (elevara al cuadrado).
Python permite tambin funciones con un nmero variable de parmetros.
En el ejemplo del cdigo 4.2 se puede ver la sintaxis utilizada en una funcin
que imprime la suma de todos sus argumentos.
# E j e m p l o s de d e f i n i c i o n e s y llamadas de f u n c i o n e s
# f u n c i n suma
def sumarLista ( parametros ) :
resultado = 0;
for v a l in parametros :
El lenguaje Python
CC-BY-NC-ND PID_00174138
7
8
9
10
La sintaxis de este ejemplo es un poco confusa, puesto que an no hemos tratado los tipos de datos complejos, como las listas y las tuplas. Esencialmente se
define un argumento que contiene una tupla con todos los posibles parmetros a recibir. Esta tupla se recorre en tiempo de ejecucin para poder utilizar
los parmetros de forma adecuada.
Un ltimo factor a tener en cuenta en los parmetros a funciones en cualquier
lenguaje de programacin es su modificacin en tiempo de ejecucin. Tradicionalmente los pasos por parmetro funcionan por valor o por referencia.
En el primer caso los argumentos a una funcin no se modifican al salir de ella
(en caso de que el cdigo interno los altere). Tcnicamente, se debe al hecho
de que realmente no pasamos a la funcin la variable en cuestin, sino una
copia local a la funcin que es eliminada al acabar su ejecucin. En el caso
del paso por referencia se pasa a la funcin un puntero al objeto (en el caso
de C) o simplemente una referencia (en lenguajes de alto nivel) que permite
su indireccin. De este modo, las modificaciones a los parmetros que se hacen dentro de la funcin se ven reflejadas en el exterior una vez la funcin
termina. En Python los pasos por parmetros son en general por referencia.
La excepcin la conforman los tipos de datos bsicos o inmutables (enteros,
flotantes, ...), que se pasan por valor. El cdigo 4.3 muestra un ejemplo de este
hecho.
Cdigo 4.3: Ejemplo de paso por valor y referencia en Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
El lenguaje Python
18
# E j e m p l o s de d e f i n i c i o n e s y llamadas de f u n c i o n e s
# f u n c i n para v e r i f i c a r l a m o d i f i c a b i l i d a d de l o s p a r a m e t r o s
def p e r s i s t e n c i a P a r a m e t r o s ( parametro1 , parametro2 ) :
parametro1 = parametro1 + 5 ;
parametro2 [ 1 ] = 6 ;
print parametro1 ;
print parametro2 ;
numeros = [ 1 , 2 , 3 , 4 ] ;
valorInmutable = 2 ;
p e r s i s t e n c i a P a r a m e t r o s ( valorInmutable , numeros ) ;
print numeros ;
print valorInmutable ;
Ved tambin
Las listas y las tuplas se
estudian en el apartado 5 de
este mdulo.
CC-BY-NC-ND PID_00174138
19
# E j e m p l o s de d e f i n i c i o n e s y llamadas de f u n c i o n e s
# f u n c i n para p r a c t i c a r e l r e t o r n o de v a l o r e s
def suma ( parametro1 , parametro2 ) :
return parametro1 + parametro2 ;
def potencia ( parametro1 , parametro2 ) :
return parametro1 parametro2 ;
def sumaPotencia ( parametro1 , parametro2 ) :
return parametro1 + parametro2 , parametro1 parametro2 ;
r e s u l t a d o 1 = suma ( 2 , 3 ) ;
print r e s u l t a d o 1 ;
r e s u l t a d o 2 = potencia ( 2 , 3 ) ;
print r e s u l t a d o 2 ;
r e s u l t a d o 3 = sumaPotencia ( 2 , 3 ) ;
print r e s u l t a d o 3 ;
El lenguaje Python
CC-BY-NC-ND PID_00174138
20
5.1. Tuplas
.
Una tupla es una secuencia inmutable y ordenada de elementos. Cada
uno de los elementos que conforman una tupla puede ser de cualquier
tipo (bsico o no). La sintaxis para declarar una tupla consiste en especificar sus elementos separados por una coma (,).
Es muy habitual agrupar todos los elementos de una tupla entre parntesis,
aunque no es imprescindible (slo se exige el uso del parntesis cuando puede
existir confusin con otros operadores). A menudo se coloca una coma al final
de la tupla para indicar la posicin del ltimo elemento. En el cdigo 5.1 se
pueden ver distintos ejemplos de uso de tuplas.
# E j e m p l o s de uso de t u p l a s
tupla_vacia = ( ) ;
tupla1 = 1 , 2 , 3 , 4 , 6 ,
tupla1b = ( 1 , 2 , 3 , 4 , 6 ) ;
tupla2 = hola ,2 ,3
tupla3 = tupla2 ,90
tupla4 = t u p l e ( ejemplo ) ;
# R e s u l t a d o de l a e j e c u c i n
>> print tupla1
( 1 , 2 , 3 , 4 , 6)
>>> print tupla1b
( 1 , 2 , 3 , 4 , 6)
>>> print tupla2
( hola , 2 , 3)
>>> print tupla2
( hola , 2 , 3)
>>> print tupla3
( ( hola , 2 , 3 ) , 90)
>>> print tupla4
( e , j , e , m , p , l , o )
El lenguaje Python
CC-BY-NC-ND PID_00174138
21
5.2. Listas
.
Una lista es una secuencia mutable y ordenada de elementos. A diferencia de las tuplas, los elementos de las listas se pueden modificar una
vez han recibido un valor asignado. Para especificar los elementos que
forman una lista, se usa una tira de elementos separada de nuevo por
coma (,), al principio y al final la lista se envuelve entre corchetes [,].
# E j e m p l o s de uso de l i s t a s
lista_vacia = [ ] ;
l i s t a = [1 ,2 ,3 ,4 ,6]
l i s t a 2 = [ hola , 2 , 3 ] ;
l i s t a 3 = [ l i s t a 2 , 9 0 , good ] ;
l i s t a 4 = l i s t ( ejemplo ) ;
l i s t a 5 = [1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9];
# R e s u l t a d o de l a e j e c u c i n
>>> print l i s t a _ v a c i a
[]
>>> print l i s t a
[ 1 , 2 , 3 , 4 , 6]
>>> print l i s t a 2
[ hola , 2 , 3]
>>> print l i s t a 3
[ [ hola , 2 , 3 ] , 90 , good ]
>>> print l i s t a 4
[ e , j , e , m , p , l , o ]
>>> l i s t a 3 [ 2 ]
good
>>> l i s t a 3 [ 0 ]
[ hola , 2 , 3]
# E j e m p l o s de a c c e s o a s u b l i s t a s
>>> l i s t a 5 [ 2 : 3 ]
[3]
>>> l i s t a 5 [ 3 : ]
[ 4 , 5 , 6 , 7 , 8 , 9]
>>> l i s t a 5 [ : 3 ]
[ 1 , 2 , 3]
>>> l i s t a 5 [ : ]
[ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9]
# Aadir e l e m e n t o s a una l i s t a
>>> l i s t a = [ 1 , 2 , 3 , 4 , 6 ]
>>> l i s t a . append ( [ 7 , 8 , 9 ] )
>>> print l i s t a
[1 , 2 , 3 , 4 , 6 , [7 , 8 , 9]]
>>> l i s t a = [ 1 , 2 , 3 , 4 , 6 ]
>>> l i s t a . extend ( [ 7 , 8 , 9 ] )
>>> print l i s t a
[ 1 , 2 , 3 , 4 , 6 , 7 , 8 , 9]
#Buscar y eliminar elementos
>>> l i s t a 2 . index ( hola )
0
>>> print l i s t a 2
[ hola , 2 , 3]
>>> l i s t a 2 . remove ( hola )
El lenguaje Python
CC-BY-NC-ND PID_00174138
53
54
55
56
57
58
59
60
61
El lenguaje Python
22
>>> print l i s t a 2
[ 2 , 3]
# o p e r a d o r e s s o b r e c a r g a d o s de c o n c a t e n a c i n
>>> print l i s t a 2 + l i s t a 2
[ 2 , 3 , 2 , 3]
>>> print l i s t a 2 4
[ 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3]
>>>
Notad que los accesos a las listas (y tambin a las tuplas) se hacen mediante
indexacin directa. Para leer el primer elemento de una lista se usa la sintaxis
nombre_lista[0]. Es importante destacar que los ndices empiezan a contar
desde 0, y llegan hasta el (nmero de elementos -1). As, en el ejemplo, lista3
tiene 3 elementos, el primero de los cuales (ndice 0) es otra lista, el segundo
(ndice 1) es un 90 y el tercero (indice 2) good. Existe tambin la posibilidad
de referenciar los elementos de una lista con ndices negativos. En este caso
se empieza a contar desde el final de la lista, siendo el ndice -1 el ltimo
elemento de la lista. Por ejemplo, lista3[-1] nos dara la palabra good, lista3[-2]
un 90, y lista3[-3] la lista equivalente a la lista2.
Aparte de poder consultar los elementos individuales de las listas, tambin
se puede acceder a una sublista. Para ello se usa el operador :. A la izquierda
del operador se coloca el ndice inicial y a la derecha el ndice final. Si no se
especifica ningn ndice significa que se cogern todos los elementos hasta
llegar al extremo correspondiente. En el ejemplo, vemos cmo lista5[:3] nos
da todos los elementos hasta el segundo (incluido), y lista5[3:] empieza por el
tercero hasta el final de la lista. En el caso de lista5[:] nos devolver toda la
lista.
Para aadir elementos a una lista, disponemos de dos mtodos, append y
extend. Append aade un elemento a una lista (independientemente de su
tipo), y extend recibe una lista de elementos, y los concatena a la lista actual.
En el ejemplo se puede observar la diferencia de comportamiento de ambos
mtodos ante la misma entrada.
Otros mtodos auxiliares tiles son la bsqueda de elementos y la eliminacin de elementos. La bsqueda se suele realizar con el mtodo index, que
devuelve la posicin donde se encuentra la primera ocurrencia del elemento.
La eliminacin se realiza con el mtodo remove que elimina la primera ocurrencia de un determinado elemento en una lista. El ejemplo muestra el uso
de estos dos mtodos, donde se busca un determinado elemento.
Otra funcin muy til en las listas, sobre todo para usar en bucles for, es range.
Esta funcin, dado un nmero natural N, nos devuelve una lista con todos los
elementos hasta N-1. As pues, si tecleamos range(8) en la lnea de comandos,
obtendremos [0, 1, 2, 3, 4, 5, 6, 7], que podrn ser seguidos en un bucle for
para ejecutar una determinada accin 8 veces.
Ved tambin
Ms adelante, en el
apartado 6, dedicado a la
orientacin a objetos, se
describir con ms detalle el
concepto de mtodo.
CC-BY-NC-ND PID_00174138
23
El lenguaje Python
5.3. Diccionarios
Los diccionarios conforman uno de los tipos de datos ms tiles para los programadores en Python, y representan una interesante novedad respecto a los
lenguajes de programacin imperativos tradicionales. Se trata de unas estructuras de memoria asociativa. Los elementos en los diccionarios no se consultan mediante un ndice, sino que se accede directamente a ellos por contenido. El cdigo 5.3 muestra un ejemplo de diccionario y su uso.
# E j e m p l o s de uso de d i c c i o n a r i o s
d i c c i o n a r i o 1 = { nombre : Alejandro , edad : 34 , numerosfavoritos : ( 3 , 7 , 1 3 ) }
tupla = ( ( nombre , Alejandro ) , ( edad , 3 4 ) , ( numerosfavoritos , ( 3 , 7 , 1 3 ) ) )
d i c c i o n a r i o 2 = d i c t ( tupla ) ;
d i c c i o n a r i o 3 = { l i b r o s : e l juego de Ender , t e l e f o n o :934572345}
a = d i c c i o n a r i o 1 [ nombre ]
>>> print a
Alejandro
>>> nombre in d i c c i o n a r i o 2
True
d i c c i o n a r i o 1 . update ( d i c c i o n a r i o 3 )
>>> print d i c c i o n a r i o 1
{ edad : 34 , nombre : Alejandro , numerosfavoritos : ( 3 , 7 , 1 3 ) , l i b r o s : e l juego de Ender ,
t e l e f o n o : 934572345}
del d i c c i o n a r i o 1 [ nombre ]
>>> print d i c c i o n a r i o 1
{ edad : 34 , numerosfavoritos : ( 3 , 7 , 1 3 ) , l i b r o s : e l juego de Ender , t e l e f o n o : 934572345}
>>> nombre in d i c c i o n a r i o 1
False
Para crear el diccionario simplemente indicaremos entre llaves {,} las parejas
de elementos que lo conforman. En cada pareja indicaremos primero el valor
llave para acceder al elemento, y despus el valor que contendr (que puede ser de cualquiera de los tipos disponibles en Python). La consulta de un
valor del diccionario se reducir a preguntar por el valor que tiene la llave asociada. En el ejemplo, guardamos en la variable a el contenido de la posicin
de memoria nombre. El string nombre nos sirve para indexar posiciones de
memoria o variables. Las estructuras de memoria asociativa que permiten esta
funcionalidad son de gran utilidad en el tratamiento de datos textuales y los
sistemas de clasificacin de lenguaje natural.
CC-BY-NC-ND PID_00174138
El lenguaje Python
24
Existen varios mtodos auxiliares para trabajar con diccionarios, entre los que
destacan el mtodo in, que permite consultar si una determinada llave est
presente en el diccionario, el mtodo update que permite combinar dos diccionarios y el mtodo del que elimina una entrada de un diccionario.
5.4. Conjuntos
Los conjuntos son secuencias ordenadas de elementos nicos (concepto matemtico de conjunto). Existen dos tipos de conjuntos, los sets y los frozensets
(que son mutables e inmutables respectivamente). Las operaciones tpicas sobre conjuntos son: conocer la longitud de un conjunto (mtodo len), conocer
si un elemento est en un conjunto (mtodo in), unin (mtodo union), la
interseccin (mtodo intersection), aadir un elemento a un conjunto (mtodo add) y eliminar un elemento de un conjunto (mtodo remove). El cdigo
5.4 muestra un ejemplo de uso de conjuntos en Python.
Cdigo 5.4: Ejemplo de conjuntos en Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# E j e m p l o s de uso de c o n j u n t o s
conjunto1 = s e t ( [ 1 , 2 , 3 , 4 ] )
conjunto2 = s e t ( [ 3 , 4 ] )
conjunto2 . remove ( 3 )
conjunto2 . add ( 5 )
print conjunto2
5.5. Ficheros
Los ficheros no son un tipo de datos en s mismos, sino un objeto que permite
interactuar con el sistema de entrada y salida para escribir datos en el disco.
En este manual, an no hemos tratado el concepto de orientacin a objetos
en Python. Sin embargo, ser necesario introducir algunos mtodos bsicos
para acceder al objeto que hace de interfaz con el disco. La funcin bsica de
acceso a un fichero se denomina open, que recibe como parmetro un nombre
de fichero y un modo (lectura r, escritura w). El acceso a los datos se puede
realizar mediante los mtodos:
Observacin
Hemos preferido explicar la
funcionalidad bsica de los
ficheros en estos apuntes,
puesto que pueden ser
necesarios durante todo el
curso para cargar los datos
necesarios para los
algoritmos de teora.
CC-BY-NC-ND PID_00174138
25
# E j e m p l o s de uso de f i c h e r o s
f =open ( " f i l e s . py " , " r " )
f . tell ()
f . read ( 3 0 )
f . read ( 1 0 )
f . tell ()
f . seek ( 2 )
f . tell ()
f . read ( 8 )
f . close ( )
# E j e m p l o s de uso de f i c h e r o s
# L e e r una l i n e a
f = open ( " T e x t f i l e s . py " , " r " )
lineas = f . readlines ( )
#imprimir por pantalla la primera l i n e a
print l i n e a s [ 0 ]
#imprimirlas todas
print l i n e a s [ : ]
#Cerrar el fichero
f . close ( ) ;
# Leer todo e l f i c h e r o l i n e a a l i n e a
for l i n e in open ( " T e x t f i l e s . py " , " r " ) :
print l i n e
# B u c l e que r e c o r r e l a s l i n e a s de un f i c h e r o o r i g e n y l a s
# c o p i a en e l d e s t i n o
f w r i t e = open ( " C o p i a T e x t f i l e s . py " , "w" )
for l i n e in open ( " T e x t f i l e s . py " , " r " ) :
fwrite . write ( line ) ;
fwrite . close ( )
El lenguaje Python
CC-BY-NC-ND PID_00174138
26
El lenguaje Python
CC-BY-NC-ND PID_00174138
27
El lenguaje Python
# D e f i n i c i n de l a c l a s e P a n a d e r i a
class Panaderia :
def _ _ i n i t _ _ ( s e l f , panes , p a s t i t a s ) :
s e l f . panes = panes
s e l f . pastas = p a st i t a s
print " En l a tienda hay " , s e l f . panes , " panes y " , p a st a s , " p a s t a s aunque e s t a s no se venden "
def vender ( s e l f ) :
i f s e l f . panes > 0 :
print " Vendido un pan ! "
s e l f . panes = 1
else :
print " Lo sentimos no quedan panes por vender "
def cocer ( s e l f , p i e z a s ) :
s e l f . panes += p i e z a s
print " Quedan " , s e l f . panes , " panes "
panaderia1 = Panaderia ( 3 , 4 )
panaderia2 = Panaderia ( 1 , 2 )
panaderia2 . vender ( )
panaderia2 . vender ( )
panaderia2 . cocer ( 1 )
panaderia2 . vender ( )
CC-BY-NC-ND PID_00174138
El lenguaje Python
28
Lo primero que observamos, despus de los comentarios, es el uso de la palabra clave class, que nos permite definir el entorno de una clase. A continuacin viene el nombre de la clase, Panadera, que se utilizar posteriormente
para construir objetos de la clase. Para definir los mtodos de la clase, hacemos uso de nuevo de la palabra clave def. Los mtodos se definen siguiendo
una sintaxis bastante parecida a las funciones.
Otro punto destacable es el mtodo __init__. Este mtodo es especial, siempre
recibe el mismo nombre (independientemente de la clase), y sirve para especificar las acciones a llevar a cabo en el momento de la creacin e inicializacin
de un objeto de la clase en cuestin. En este caso, recibe tres parmetros, aunque el primero de ellos es de nuevo especial, se trata de la palabra reservada
self. Self se utiliza para hacer referencia al propio objeto. Una vez creado, self
nos permitir diferenciar los nombres de las variables miembro del objeto del
resto de valores. La funcin del self es parecida a this en otros lenguajes de
programacin (C++, JAVA,...). Si seguimos mirando el ejemplo, observamos
cmo tenemos una variable miembro llamada panes, y un argumento a la
funcin __init__ con el mismo nombre. En la expresin (self.panes=panes)
diferenciamos ambos valores mediante el uso del self.
ejecucin
de
de
mtodos,
programacin,
como
sigue
en
la
muchos
sintaxis
lennom-
bre_del_objeto.nombre_del_metodo(argumentos,...).
6.2. Herencia
.
Cuando decimos que una clase hereda de otra, nos referimos a que la
clase resultante contendr todos los atributos y mtodos de la clase padre o superclase, permitiendo de esta forma una especializacin progresiva de las clases y una mayor reutilizacin de cdigo.
Ved tambin
La palabra clave def se
estudia en el apartado 4,
dedicado a las funciones.
CC-BY-NC-ND PID_00174138
29
Para hacer que una clase herede de otra en Python, simplemente tenemos que
indicarlo a continuacin del nombre de la clase, entre parntesis. En el cdigo
6.2 se muestra un ejemplo muy simple de herencia.
# D e f i n i c i n de l a c l a s e Animal : E j e m p l o s de H e r e n c i a
class Animal :
def _ _ i n i t _ _ ( s e l f , age , weight ) :
s e l f . age = age
s e l f . __weight = weight
def __privateMethod ( s e l f ) :
print s e l f . weight ;
def getWeight ( s e l f ) :
return s e l f . __weight ;
def e a t ( s e l f , kgm ) :
s e l f . __weight += kgm;
print " The animal Weitghs : " , s e l f . __weight , " a f t e r e a t i n g . "
class Bird ( Animal ) :
def f l y ( s e l f ) :
print " I f l y as a b i r d ! "
class Mammal( Animal ) :
def f l y ( s e l f ) :
print " I can not f l y , I am a mammal! "
class Ostrich ( Animal , Bird ) :
#Avestruz
def f l y ( s e l f ) :
print " I can not f l y , I am a Bird but o s t r i c h s do not f l y ! "
class Platypus1 (Mammal, Bird ) :
pass
class Platypus2 ( Bird ,Mammal ) :
pass
animal1 = Animal ( 3 , 0 . 5 )
animal1 . e a t ( 0 . 1 )
canary = Bird ( 1 , 0 . 4 5 )
canary . e a t ( 0 . 0 2 )
canary . f l y ( )
bear = Mammal(10 ,150)
bear . e a t ( 1 0 )
bear . f l y ( )
o s t r i c h = Ostrich ( 5 , 3 0 )
ostrich . fly ( )
platypus = Platypus1 ( 2 , 3 )
platypus . f l y ( )
platypus = Platypus2 ( 2 , 3 )
platypus . f l y ( )
print bear . getWeight ( )
bear . privateMethod ( )
Observad que en este ejemplo trabajamos con cuatro clases distintas: Animal,
Bird, Mammal y Ostrich. Animal es superclase del resto, que heredan de ella.
En el caso de Ostrich, notad que hereda de dos clases a la vez (aunque no
fuese estrictamente necesario). Python permite herencia mltiple. Ejecutad el
El lenguaje Python
CC-BY-NC-ND PID_00174138
El lenguaje Python
30
6.3. Encapsulacin
Una de las principales ventajas de la programacin orientada a objetos es la
encapsulacin. Esta propiedad permite construir objetos con mtodos y atributos que no pueden llamarse externamente. Se trata de cdigo interno que
el programador ha preparado y que no quiere que se vea alterado. El objeto
ofrece una serie de servicios al exterior, ocultando parte de su codificacin
interna. En Python no tenemos palabras clave especficas para denominar la
encapsulacin. Todos los mtodos en Python son pblicos, excepto aquellos
Encapsulacin en otros
lenguajes
En otros lenguajes s se
utilizan palabras clave para
denominar la encapsulacin.
Por ejemplo,en C++ o JAVA,
que usan public, private,
protected,...
que empiezan por un doble guin bajo (__). En el ejemplo anterior, la llamada
a bear.privateMethod() produce una excepcin en tiempo de ejecucin.
La encapsulacin tiene mucha utilidad si se quieren esconder los detalles de
implementacin de una determinada clase. Supongamos por ejemplo que internamente el peso de una clase Animal se guardase en otras unidades (sistema
ingls) en lugar de kilogramos. El uso de funciones setters y getters pblicas
permitira que la interfaz con el usuario fuese siempre la misma, independientemente de esta codificacin interna, que sera privada. Se ha ejemplificado
este hecho en el mtodo getWeight() de la clase Mammal.
Como curiosidad, observad que la funcin __init__ empieza tambin por dos
guiones bajos. Los mtodos Python que empiezan y terminan por guiones
bajos son especiales, y no tienen que ver con el concepto de mtodo privado.
Otra funcin especial es el destructor o __del__ que se llama cuando el objeto
deja de utilizarse para su eliminacin.
Ved tambin
El concepto de getter y setter
se ha tratado con
profundidad en la asignatura
Programacin orientada a
objetos.
CC-BY-NC-ND PID_00174138
31
El lenguaje Python
6.4. Polimorfismo
En el caso de Python, como en la mayora de lenguajes de programacin, se
basa en el uso de herencia.
.
Enlace dinmico
El enlace dinmico es la
decisin de qu cdigo se
ejecuta en tiempo de
ejecucin en lugar de en
tiempo de compilacin.
CC-BY-NC-ND PID_00174138
32
# Ejemplo de uso de l e n g u a j e f u n c i o n a l
def money( country ) :
def spain ( ) :
print " Euro "
def japan ( ) :
print " Yen "
def eeuu ( ) :
print " d o l l a r "
functor_money ={ " es " : spain ,
" jp " : japan ,
" us " : eeuu }
return functor_money [ country ]
f = money( " us " )
money( " us " ) ( )
f ()
f = money( " jp " )
f ()
Introducid el ejemplo y ejecutadlo. Como podris observar, la lnea de cdigo f = money(us) no realiza ninguna accin visible. Esta lnea se encarga
de crear una nueva variable, que ser una funcin. Esta funcin se genera o
selecciona en funcin de la entrada del usuario, en este caso, una cadena de
El lenguaje Python
CC-BY-NC-ND PID_00174138
33
# Ejemplo de uso de i t e r a d o r e s
def double (num) :
return num2
def even (num) :
return (num%2) == 0
def operation (num1,num2 ) :
return num1num2+1;
l 1 = range ( 1 0 ) ;
l 2 = map( double , l 1 ) ;
l 3 = f i l t e r ( even , l 1 ) ;
l 4 = reduce ( operation , l 1 ) ;
# E q u i v a l e n t e p e r o usando lambda f u n c t i o n
l 5 = map(lambda num: num2 , l 1 )
l 6 = f i l t e r (lambda num: num%2==0,l 1 )
l 7 = reduce (lambda num1,num2: num1num2 +1 , l 1 )
#Comprensin de l i s t a s
l 8 = [num2 for num in l 1 ] ;
print
print
print
print
l1
l2 , l 5
l3 , l 6
l4 , l 7
print l 8
El lenguaje Python
CC-BY-NC-ND PID_00174138
34
El lenguaje Python
Pattern matching
A diferencia de otros
lenguajes puramente
funcionales, Python no
implementa pattern
matching, aunque es posible
simularlo. Estos conceptos
quedan ya fuera del alcance
de este manual.
CC-BY-NC-ND PID_00174138
35
El lenguaje Python
CC-BY-NC-ND PID_00174138
36
El lenguaje Python
8.1. NumPy
La librera NumPy nos permite trabajar con datos cientficos, equiparando en
cierta forma el potencial de Python al de otros lenguajes como Matlab o Octave. NumPy se encuentra disponible de forma gratuita en Internet*. Desde all
* http://numpy.scipy.org/
8.2. PyLab
PyLab es una librera que intenta aportar funcionalidades extra a NumPy integrando gran parte de las funciones Matlab que se han usado histricamente
en entornos de machine learning. En Internet* se puede encontrar el paquete
* http://www.scipy.org/PyLab
8.3. SciPy
SciPy es una expansin de NumPy, que integra nuevos paquetes para el tratamiento cientfico de datos. Integra gran cantidad de funciones de procesamiento de imgenes, procesado de la seal, estadstica, integracin numrica.
En Internet* se puede encontrar la ltima versin de la plataforma y su documentacin asociada.
* http://www.scipy.org/
CC-BY-NC-ND PID_00174138
37
Resumen
En este mdulo hemos visto los elementos bsicos de la programacin en Python. El mdulo est pensado para que un estudiante con conocimientos de
programacin pueda rpidamente introducirse en Python, y pueda realizar sus
primeros programas en poco tiempo. El objetivo primordial del mdulo y de
la asignatura es el correcto seguimiento de los conceptos expuestos en teora.
No se pretende formar expertos programadores en Python, sino ms bien capacitar al estudiante para poder entender el abundante cdigo de ejemplo que
incorporan los materiales.
Es aconsejable que realicis los ejercicios para acabar de asentar los conocimientos bsicos. No es necesario realizarlos todos, simplemente intentar hacer
aquellos que a primera vista parezcan ms complejos. Junto con el material,
podris encontrar en el aula las soluciones a los ejercicios, para poder realizar
las consultas y comparaciones oportunas.
El lenguaje Python
CC-BY-NC-ND PID_00174138
38
Ejercicios de autoevaluacin
1. Escribid una funcin en Python que, dada una lista de nmeros, devuelva otra lista en
orden inverso. Para realizar este ejercicio se deber utilizar un bucle o estructura repetitiva.
No se permite el uso de funciones miembro de la clase list (en especial list.reverse()).
2. Escribid una funcin que, dado un nmero entero N, devuelva una lista con todos los
nmeros primos hasta N. Para solucionar el ejercicio debis crear una funcin auxiliar que
indique si un determinado nmero es primo (retornando un valor booleano).
3. Escribid una funcin que reciba una tupla compuesta por caracteres, y devuelva una lista
con los caracteres en maysculas. Debis recorrer la tupla carcter a carcter para realizar
la conversin. Para convertir un carcter a mayscula podis usar el mtodo upper(). Por
ejemplo a.upper() nos devuelve A.
4. Convertid el texto ejemplo en una lista que contenga sus 7 caracteres. Despus convertidlo en una tupla y usando la funcin del ejercicio anterior obtened una lista con el texto
en maysculas.
5. Escribid una funcin que, dada una lista de nmeros, devuelva una lista con slo los
elementos en posicin par.
6. Extended la funcin anterior para que, dada una lista y unos ndices, nos devuelva la lista
resultado de coger slo los elementos indicados por los ndices. Por ejemplo si tenemos la
lista [1,2,3,4,5,6] y los ndices [0,1,3] debera devolver la lista [1,2,4].
7. Escribid una funcin que nos devuelva cuntas veces aparece cada una de las palabras
de un texto (frecuencia de aparicin de las palabras). Para ello podis usar un diccionario
donde la llave sea cada una de las palabras del texto y el contenido guarde el nmero de
apariciones de la palabra. Para simplificar el ejercicio, podis usar el mtodo split( ), que,
dado un separador (el espacio), nos devuelve una lista con todas las palabras de un texto de
forma separada. Por ejemplo: hola esto es un ejemplo.split( ) nos devolvera: [hola, esto,
es, un, ejemplo]
8. Escribid una funcin que devuelva un conjunto formado por los nmeros compuestos
(no primos) menores que un N dado.
9. Codificad una funcin que escriba en un fichero de texto los nmeros primos que van
desde el 1 hasta el 999.999.
10. Escribid una funcin que lea el contenido de un fichero de texto y nos d la frecuencia de aparicin de cada palabra. Podis usar el cdigo del ejercicio 7, en el que se usaban
diccionarios para contar las apariciones de cada palabra.
11. Implementad un programa que tenga dos clases, Camin y Coche, ambas subclases de
la superclase Vehculo. Elegid tres atributos comunes a Coche y Camin y dos atributos
especficos a cada clase. Pensad bien dnde colocar cada atributo. Escribid un mnimo de
dos mtodos en cada clase y ejecutadlos en el programa principal.
12. Escribid una versin del ejercicio 2 que utilice programacin funcional. Podis usar el
iterador filter para mantener slo aquellos valores de la lista que sean primos.
13. Escribid una funcin que dependiendo de un selector ejecute alguno de los primeros 5
ejercicios de este apartado. La funcin recibir un carcter (1,2,...,5) y deber devolver una
funcin que testea el apartado correspondiente. Por ejemplo, si escribimos f=selector(4),
f deber ser una funcin que al ejecutarse finalmente nos devuelva la palabra ejemplo en
maysculas.
El lenguaje Python
CC-BY-NC-ND PID_00174138
39
Bibliografa
Gonzlez Duque, Ral. Python para todos. CC. (Version on-line)
Lutz, Mark (2011). Programming Python (4.a ed.). OReilly Media.
Lutz, Mark (2007). Learning Python (3.a ed.). OReilly Media.
Martelli, Alex (2006). Python in a Nutshell (2.a ed.). OReilly Media.
Pilgrim, Mark (2004). Dive Into Python. APress (Versin on-line).
El lenguaje Python