Sei sulla pagina 1di 43

El lenguaje Python

David Masip Rod


PID_00174138

www.detodoprogramacion.com

Libros Universitarios, juegos, Revistas, Cursos, Software, Sistemas Operativos, Antivirus y ms Gratis para el Conocimiento...! www.detodoprogramas.com Vistanos y comprubalo

Material para los amantes de la Programacin Java, C/C++/C#,Visual.Net, SQL, Python, Javascript, Oracle, Algoritmos, CSS, Desarrollo Web, Joomla, jquery, Ajax y Mucho Mas www.detodoprogramacion.com Visitanos

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

www.detodoprogramacion.com

CC-BY-NC-ND PID_00174138

El lenguaje Python

ndice

Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1. 2. Instalacin de Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1. 2.2. 3. Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cadenas de caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5 6 7 9 9 10 12 12 13 13 14 14 16 16 18 20 20 21 23 24 24 25 27 27 28 28 30 31 32 34 34

Control de ujo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1. 3.2. Sentencias condicionales: la instruccin if . . . . . . . . . . . . . . . . . . . . 3.1.1. 3.2.1. 3.2.2. Sentencias if-elif-else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bucles for ... in . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Secuencias iterativas: bucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4.

Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1. 4.2. Parmetros de entrada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Valores de retorno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5.

Tipos de datos en Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1. 5.2. 5.3. 5.4. 5.5. Tuplas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Diccionarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Conjuntos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ficheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.5.1. Ficheros de texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6.

Python y la orientacin a objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1. 6.2. 6.3. 6.4. Los objetos en Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1.1. Creacin de instancias (objetos) de una clase . . . . . . . . . Herencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Encapsulacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Polimorsmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

7.

Python como lenguaje funcional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.1. 7.2. Funciones lambda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Comprensin de listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

www.detodoprogramacion.com

CC-BY-NC-ND PID_00174138

El lenguaje Python

8.

Libreras: NumPy PyLab y SciPy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.1. 8.2. 8.3. NumPy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . PyLab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . SciPy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

35 36 36 36 37 38 39

Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ejercicios de autoevaluacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bibliografa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

www.detodoprogramacion.com

CC-BY-NC-ND PID_00174138

El lenguaje Python

Introduccin

En este mdulo aprenderemos las bases del lenguaje de programacin Python. Este mdulo no pretende ser una gua exhaustiva de todas las caractersticas que este lenguaje de programacin nos ofrece, sino que est enfocado a introducir al estudiante en el entorno Python. El objetivo del texto ser ayudar a comprender los ejemplos que se exponen en los mdulos de teora, y proporcionar una base que permita al estudiante elaborar las distintas actividades que el curso requiere. A nivel de pre-requisitos, no asumiremos ningn conocimiento previo de Python. Sin embargo, es muy importante tener conocimientos de algn lenguaje de programacin previo (C, C++, JAVA, ...), puesto que los conceptos elementales (variable, bucle, funcin,...) no se tratarn en profundidad en este mdulo. El lenguaje Python fue diseado a nales de la dcada de los ochenta por Guido van Rossum. Se trata de un lenguaje de programacin de muy alto nivel, con una sintaxis muy clara y una apuesta rme por la legibilidad del cdigo. Sin duda es un lenguaje de programacin muy verstil, fuertemente tipado, imperativo y orientado a objetos, aunque contiene tambin caractersticas que lo convierten en un lenguaje de paradigma funcional. Python se puede considerar un lenguaje semi-interpretado. A diferencia de C, el cdigo Python no se ejecuta directamente en la mquina destino, sino que es ejecutado por un SW intermedio (o intrprete). Sin embargo, al igual que JAVA, Python compila el cdigo escrito en lenguaje de alto nivel para obtener un pseudo cdigo mquina (bytecode) que es el que propiamente ejecuta el intrprete. Existen versiones del intrprete de Python para la mayor parte de las plataformas. En este mdulo, explicaremos los pasos necesarios para instalar Python en una determinada plataforma. A continuacin veremos las principales caractersticas del lenguaje a nivel sintctico.

www.detodoprogramacion.com

CC-BY-NC-ND PID_00174138

El lenguaje Python

Objetivos

Los objetivos que el alumno debe de haber conseguido una vez estudiados los contenidos de este mdulo son los siguientes:

1. Refrescar los conceptos elementales de programacin aprendidos en cursos anteriores. 2. Aprender las bases del lenguaje Python. 3. Ser capaz de entender el cdigo que se muestra en los ejemplos de teora y poder modicarlo para realizar otras funcionalidades. 4. Usar caractersticas avanzadas de Python que permitan utilizarlo como lenguaje rpido para el diseo y codicacin de prototipos de inteligencia articial.

www.detodoprogramacion.com

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 (codicada en C#) o JPython (codicada en JAVA). Para instalar una determinada versin de Python, aconsejamos recurrir a su sitio web ocial*. 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/

* http://www.python.org/

macbook:~ david$ python Python 2.6.6 (r266:84292, Oct 16 2010, 21:41:03) [GCC 4.0.1 (Apple Inc. build 5490)] on darwin Type help, copyright, credits or license for more information. >>> print Hello World Hello World >>> quit() macbook:~ david$

En este ejemplo, hemos llamado al intrprete de Python desde el smbolo de sistema. Al iniciarse, despus de imprimir la informacin de versiones, Python nos muestra el smbolo >>> para indicarnos que el intrprete est esperando comandos. En este pequeo ejemplo le pedimos que nos imprima la cadena de caracteres Hello World, y despus de ver el resultado, salimos de Python mediante la instruccin quit(), volviendo al smbolo de sistema. Llegados a este punto, podemos considerar que tenemos la instalacin bsica de Python lista para su uso. En este mdulo trabajaremos fundamentalmente con un editor de textos, y ejecutaremos los scripts, que programaremos mediante el intrprete. En el ejemplo anterior, podramos haber guardado la lnea print Hello World en un archivo llamado Hola.py, y ejecutarlo mediante el intrprete con la instruccin:

www.detodoprogramacion.com

CC-BY-NC-ND PID_00174138

El lenguaje Python

macbook:~ david$ python Hola.py Hello World

Entornos de desarrollo IDE Existe la posibilidad de instalar entornos de desarrollo IDE especcos para Python. No es el objetivo de este mdulo analizar los IDE disponibles en el mercado actualmente, aunque citaremos los tres entornos libres ms conocidos. Por un lado PyDEV* es un conocido plug in de Python para el entorno de desarrollo Eclipse, bastante utilizado en el sistema universitario. Tambin existe la opcin de usar un entorno propio, como SPE (Stanis Python Editor)** , o Wing***. En este mdulo trabajaremos directamente contra el intrprete de comandos, cualquier editor de textos simple ser suciente para las funcionalidades que desarrollaremos.

* http://pydev.org/ ** http://sourceforge.net /projects/spe/ *** http://www.wingware.com/

www.detodoprogramacion.com

CC-BY-NC-ND PID_00174138

El lenguaje Python

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 otantes 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 otantes, 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.

www.detodoprogramacion.com

CC-BY-NC-ND PID_00174138

10

El lenguaje Python

Taula 1. Operadores con los tipos bsicos Nombre Operador Ejemplo Suma + a=1+2 #a = 3 Taula 2. Operadores a nivel de bit Nombre Operador Ejemplo And & a = 2&1 #a = 0(10&01) Or | a = 2|1 #a = 3(10|01) Xor a=31 #a = 1 Not a = 1 #a = 2 Desplazamiento a la derecha a=42 #a = 1 Desplazamiento a la izquierda a=12 #a = 4 Resta o negacin a = 2 5 o a = 3 #a = 3 Multiplicacin * a=23 #a = 6 Divisin / a = 5,4/2 #a = 2,7 Mdulo % a = 5 %2 #a = 1 Divisin entera // a = 5,8//2 #a = 2,0 Exponenciacin ** a = 3 4 #a = 81

El valor de retorno de un operador en Python viene determinado por el tipo de las variables que intervienen en la operacin. As, por ejemplo, si sumamos dos nmeros enteros, nos devolver otro valor entero. Si uno de los dos operandos es un valor en punto otante, el resultado de la operacin ser tambin un valor en punto otante. El tipo bsico booleano puede recibir dos valores (true, false), y se utilizan fundamentalmente para expresar el resultado de condiciones, especialmente tiles en los bucles y control de ujo condicional. En la tabla 3 se resumen los distintos operadores que trabajan con valores booleanos, comunes a la mayor parte de lenguajes de programacin.
Taula 3. Operadores con booleanos Operador Ejemplo Resultado And b = False and True b ser False Or b = False or True b ser True Not b = Not False a=n ser True == 8 == 9 False != 8! = 9 True < 8<9 True > 8>9 False

2.2. Cadenas de caracteres Las cadenas de caracteres son fragmentos de texto delimitados en Python por comillas simples (Ejemplo de cadena) o dobles (Ejemplo de cadena). Si queremos introducir saltos de lnea, disponemos del carcter de escape \ n. Tambin podemos usar otros caracteres de escape tradicionales como \t (tabulacin) o \b (borrar carcter). Para conseguir que el texto se imprima tal y como aparece en el cdigo fuente sin tener que recurrir a los cdigos de escape, podemos delimitarlo por triples comillas (podis ver un ejemplo en el cdigo 2.2). Cdigo 2.2: Ejemplos de uso cadenas de caracteres
1 2 3 4 5 6 7 8 9 10 # 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

www.detodoprogramacion.com

CC-BY-NC-ND PID_00174138

11

El lenguaje Python

11 12 13 14 15 16 17 18 19 20

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 " 3 e ; #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 conversin de valores numricos a cadena de caracteres.
Si tecleamos str(8.987) en la lnea de comandos, obtendremos la salida 8.987.

Ejemplo

www.detodoprogramacion.com

CC-BY-NC-ND PID_00174138

12

El lenguaje Python

3. Control de ujo .

Todos los lenguajes de programacin ponen a nuestra disposicin instrucciones de control de ujo. Estas instrucciones permiten al programador alterar el orden secuencial del cdigo con el n 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 ujo: las sentencias condicionales y los bucles (o repeticiones).

3.1. Sentencias condicionales: la instruccin if La instruccin condicional if (del ingls si) recibe como entrada una expresin booleana, y sirve para ejecutar una de porcin de cdigo en funcin de si se cumple esta condicin (el resultado de su evaluacin es true). . La sintaxis de la instruccin consiste en la palabra clave if, a continuacin la expresin booleana de la condicin, y un signo : que indica el nal de la condicin, y nalmente, el cdigo a ejecutar en caso de que la condicin se evale a true.

En el cdigo 3.1 tenis un ejemplo de instruccin if. Cdigo 3.1: Ejemplo de sintaxis de un bloque if
1 2 3 4 5 6 7 # 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 especcas (begin, end,...) o llaves ( {,..., }) reservadas para denir bloques de cdigo, en Python slo podemos usar tabulacin.

www.detodoprogramacion.com

CC-BY-NC-ND PID_00174138

13

El lenguaje Python

La identacin es un rasgo muy caracterstico del cdigo Python, y permite entre otras cosas una lectura mucho ms agradable de los programas, y una fcil identicacin de las distintas partes.

3.1.1. Sentencias if-elif-else Cuando el objetivo de la sentencia condicional es dividir la ejecucin del cdigo en funcin de si se cumple la condicin o no, y queremos que se haga alguna accin de forma explcita cuando la condicin no se cumple, usamos la palabra clave else (siempre seguida de :). Existe una tercera palabra clave en las instrucciones de control de ujo condicionales, elif, que se utiliza para aadir ms condiciones a la sentencia if. Esto nos puede ser muy til si tenemos muchos casos que diferenciar y queremos tratarlos todos. Se pueden aadir tantos bloques elif como queramos. En el cdigo 3.2 podemos ver un ejemplo de uso del entorno if-elif-else. Cdigo 3.2: Ejemplo de sintaxis de un bloque else
1 2 3 4 5 6 7 8 9 10 11 12 # 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

Si el valor de c fuera 0, se ejecutara la lnea print El nmero es exactamente 0. Cuando no se cumple la condicin del if, ni de ninguno de los elif que pudiera haber, se acaba ejecutando el bloque de instrucciones correspondientes al else. Finalmente, existe una forma compacta de representar sentencias condicionales (de forma similar a como usamos Cond ? accin si A es cierto: accin si Cond es falso en C) en Python. Se trata de los bloques Accion1 if Cond else Accion2. En este caso, se comprueba la condicin Cond y se ejecuta Accion1 si es true o Accion2 si es false.

3.2. Secuencias iterativas: bucles . Los bucles son estructuras de control de ujo que permiten repetir un bloque de cdigo un determinado o indeterminado nmero de veces. Esencialmente existen dos tipos de bucles: for y while.

www.detodoprogramacion.com

CC-BY-NC-ND PID_00174138

14

El lenguaje Python

3.2.1. Bucles for ... in El bucle for...in se utiliza para ejecutar una secuencia de pasos un determinado nmero de veces (ya conocido previamente). . La sintaxis que se utiliza es: for elemento in secuencia: y a continuacin el bloque de acciones con la identacin correcta.

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.

En el ejemplo, la variable palabra ir cogiendo a cada paso el valor de uno de los elementos de la lista vector (ms adelante veremos ms detalles sobre el funcionamiento de las listas): en la primera iteracin palabra tomar el valor hola, en la segunda valdr automticamente buenos, y as sucesvamente. No ser necesario trabajar con ndices puesto que Python har todo el trabajo por nosotros.

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.

www.detodoprogramacion.com

CC-BY-NC-ND PID_00174138

15

El lenguaje Python

Cdigo 3.4: Ejemplo de sintaxis de un bucle while


1 2 3 4 5 6 7 # E j e m p l o s de uso d e l b u c l e f o r pares = 2 ; while pa res <= 20: print pares 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 innitos. 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 ujo 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 pa res > 0 : print pares pares = pares + 2 i f pa res > 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

www.detodoprogramacion.com

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 denido 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).

Delimitacin de cdigo fuente Hay que recordar que Python no usa llaves ni palabras clave para delimitar cdigo fuente.

4.1. Parmetros de entrada Las llamadas a funciones reciben como argumentos una lista de parmetros (implementada en Python como una tupla), que se corresponden con los parmetros establecidos en el momento de la denicin de la funcin. En el ejemplo del cdigo 4.1 se puede observar la llamada a una funcin que imprime el resultado de elevar un nmero base (parametro1) a un exponente (parametro2).

Cdigo 4.1: Ejemplo de sintaxis de una funcin


1 2 3 4 5 # 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 ) :

www.detodoprogramacion.com

CC-BY-NC-ND PID_00174138

17

El lenguaje Python

6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

" " Ejemplo de funcin que e l e v a un nmero o base a un exponente print parametro1 parametro2 def exponenciar2 ( parametro1 , parametro2 = 2 ) : print parametro1 parametro2 exponenciar ( 2 , 3 ) ; exponenciar ( parametro2 =3 , parametro1 = 2 ) ; exponenciar ( 3 , 2 ) ; exponenciar ( parametro2 =2 , parametro1 = 3 ) ; exponenciar2 ( 5 ) ; exponenciar2 ( 5 , 3 ) ; # llamadas e r r n e a s exponenciar ( 2 , 3 , 4 ) ;

En primer lugar notad que la tabulacin vuelve a jugar un papel clave. Para diferenciar el nal de la denicin 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 nal de la denicin 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 denido 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.

Cdigo 4.2: Ejemplo de sintaxis de una funcin con parmetros variables


1 2 3 4 5 6 # 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 :

www.detodoprogramacion.com

CC-BY-NC-ND PID_00174138

18

El lenguaje Python

7 8 9 10

resultado = resultado + val ; print r e s u l t a d o ; sumarLista ( 1 , 2 , 3 , 4 ) ;

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 dene 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 modicacin 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 modican 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 modicaciones a los parmetros que se hacen dentro de la funcin se ven reejadas 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, otantes, ...), 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 # 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.

Como se puede observar a partir de la ejecucin del ejemplo, el vector de nmeros sufre las modicaciones debidas al cdigo interno de la funcin, mientras que el valor entero se modica dentro de la funcin pero pierde esta modicacin al devolver el control al programa principal.

4.2. Valores de retorno Hasta ahora se han descrito las funciones Python como fragmentos de cdigo que efectan unas determinadas acciones de forma reutilizable. Los ejemplos

www.detodoprogramacion.com

CC-BY-NC-ND PID_00174138

19

El lenguaje Python

vistos son en el fondo versiones procedimentales de funciones, puesto que en ningn caso se devuelve un valor de retorno. . La sintaxis para el retorno de valores en Python diere de los lenguajes de programacin habituales, puesto que Python permite devolver ms de un valor de retorno. La palabra clave a utilizar es return, seguida de la lista de argumentos que hay que devolver.

Existe tambin la posibilidad de obviar los valores de retorno y utilizar el paso de parmetros por referencia, obteniendo un resultado similar. El cdigo 4.4 muestra tres ejemplos de uso de retorno de valores en funciones. Notad que la funcin sumaPotencia devuelve el resultado de efectuar las dos operaciones en forma de lista. En realidad la funcin slo devuelve un valor (la lista), pero el efecto producido es el mismo que si pudiera devolver mltiples valores.

Cdigo 4.4: Ejemplo de retorno de valores en Python


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 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 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 ;

www.detodoprogramacion.com

CC-BY-NC-ND PID_00174138

20

El lenguaje Python

5. Tipos de datos en Python .

En el apartado anterior hemos visto los tipos elementales de datos en Python: los enteros, los valores otantes, las cadenas de texto y los valores booleanos. En este apartado, veremos tipos de datos ms complejos que permiten trabajar con agrupaciones de estos tipos de datos bsicos. En especial, veremos las tuplas, las listas, los conjuntos, los diccionarios y nalmente, los cheros.

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 especicar 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 nal de la tupla para indicar la posicin del ltimo elemento. En el cdigo 5.1 se pueden ver distintos ejemplos de uso de tuplas.

Cdigo 5.1: Ejemplo de tuplas en Python


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 # 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 )

www.detodoprogramacion.com

CC-BY-NC-ND PID_00174138

21

El lenguaje Python

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 modicar una vez han recibido un valor asignado. Para especicar los elementos que forman una lista, se usa una tira de elementos separada de nuevo por coma (,), al principio y al nal la lista se envuelve entre corchetes [,].

En el cdigo 5.2 se pueden ver ejemplos de usos de listas. Cdigo 5.2: Ejemplo de listas en Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 # 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 )

www.detodoprogramacion.com

CC-BY-NC-ND PID_00174138

22

El lenguaje Python

53 54 55 56 57 58 59 60 61

>>> 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 nal 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 nal. Si no se especica ningn ndice signica 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 nal 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.

www.detodoprogramacion.com

CC-BY-NC-ND PID_00174138

23

El lenguaje Python

Finalmente, existen sobrecargas de los operadores aritmticos bsicos +,*. El operador suma concatena dos listas, y el operador multiplicacin recibe una lista y un valor escalar, devolviendo la repeticin de la lista (tantas veces como indica el valor).

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.

Cdigo 5.3: Ejemplo de tuplas en Python


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 # 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 clasicacin de lenguaje natural.

www.detodoprogramacion.com

CC-BY-NC-ND PID_00174138

24

El lenguaje Python

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

uni = conjunto1 . union ( conjunto2 ) i n t = conjunto1 . i n t e r s e c t i o n ( conjunto2 ) >>> print uni set ([1 , 2, 3, 4, 5]) >>> print i n t set ( [ 4 ] )

5.5. Ficheros Los cheros 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 chero se denomina open, que recibe como parmetro un nombre de chero 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 cheros en estos apuntes, puesto que pueden ser necesarios durante todo el curso para cargar los datos necesarios para los algoritmos de teora.

read: Lee un determinado nmero de bytes del chero (argumento del mtodo). seek: Se encarga de posicionar el lector en el byte indicado en el argumento.

www.detodoprogramacion.com

CC-BY-NC-ND PID_00174138

25

El lenguaje Python

tell: Devuelve la posicin que se est leyendo en la actualidad del chero. close: Cierra el chero.

Cdigo 5.5: Ejemplo de acceso a un chero. Ejecutar el cdigo y vericar el funcionamiento de las funciones bsicas de acceso a chero
1 2 3 4 5 6 7 8 9 10 11 12 13 14 # 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 ( )

5.5.1. Ficheros de texto Los cheros de texto son un caso particular que Python permite tratar de forma mucho ms cmoda e integrada en el lenguaje. Existe un mtodo readlines(), que permite leer el contenido del chero por lneas, devolviendo un array donde se puede indexar cada una de ellas. Del mismo modo, es posible acceder lnea por lnea al contenido de un chero, y efectuar un tratamiento individualizado de cada una de ellas mediante un simple bucle for. En el ejemplo del cdigo 5.6 podis ver el cdigo que recorre un chero y lo imprime por pantalla. Cdigo 5.6: Ejemplo de acceso a un chero
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 # 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 ( )

www.detodoprogramacion.com

CC-BY-NC-ND PID_00174138

26

El lenguaje Python

Finalmente, disponemos del mtodo write que permite escribir contenidos en un chero. En el ejemplo anterior, recorremos el primer chero y lnea a lnea lo vamos escribiendo en el chero destino (CopiaTextles).

www.detodoprogramacion.com

CC-BY-NC-ND PID_00174138

27

El lenguaje Python

6. Python y la orientacin a objetos .

El lenguaje Python permite trabajar mediante el paradigma de programacin imperativa clsica (como en todos los ejemplos vistos hasta ahora), o mediante el paradigma de la orientacin a objetos, e incluso mediante lenguaje funcional. En este apartado veremos la sintaxis de la orientacin a objetos (OO) en Python, con algunos ejemplos prcticos. Asumiremos que el estudiante conoce las bases de la OO, y que est familiarizado con los conceptos de clase, objeto y mtodo.

6.1. Los objetos en Python Un objeto no es ms que el resultado de encapsular una determinada entidad, que est formada por un estado (los datos o atributos) y un funcionamiento (los mtodos). Una clase es la plantilla o concepto genrico de un objeto, que se usa para denir sus propiedades y servicios. Un objeto es pues una instancia concreta de una clase. Para denir una clase usamos la palabra clave class. En el fragmento de cdigo 6.1 mostramos un ejemplo de denicin de una clase.

Cdigo 6.1: Ejemplo de denicin de una clase


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 # 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 ( )

www.detodoprogramacion.com

CC-BY-NC-ND PID_00174138

28

El lenguaje Python

Lo primero que observamos, despus de los comentarios, es el uso de la palabra clave class, que nos permite denir 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 denir los mtodos de la clase, hacemos uso de nuevo de la palabra clave def. Los mtodos se denen 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 especicar 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.
Ved tambin La palabra clave def se estudia en el apartado 4, dedicado a las funciones.

6.1.1. Creacin de instancias (objetos) de una clase Para crear un objeto concreto de una clase, basta con usar el nombre que le hemos dado a la clase seguido de los argumentos que necesita la funcin de inicializacin (que aqu tiene un efecto similar a los constructores del lenguaje C++). En el ejemplo hemos creado dos objetos de la clase Panadera (panaderia1 y panaderia2). . La guajes ejecucin de de mtodos, como sigue la en muchos sintaxis lennom-

programacin,

bre_del_objeto.nombre_del_metodo(argumentos,...).

En el ejemplo se llama en diversas ocasiones a los mtodos vender y cocer de los objetos creados. Ejecutad el fragmento de cdigo e interpretar el resultado que se imprime por pantalla.

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.

www.detodoprogramacion.com

CC-BY-NC-ND PID_00174138

29

El lenguaje Python

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.

Cdigo 6.2: Ejemplo de uso de herencia en las clases Python


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 # 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

www.detodoprogramacion.com

CC-BY-NC-ND PID_00174138

30

El lenguaje Python

cdigo, y entender su funcionamiento. Observad que el mtodo y() tiene un comportamiento diferente en funcin del tipo concreto del objeto. Muchos lenguajes no permiten herencia mltiple, dado que esto puede originar conictos cuando se heredan mtodos o atributos con el mismo nombre de dos superclases. . En caso de conicto, Python da preferencia a la clase situada ms a la izquierda en el momento de su denicin.

Volver a ejecutar el ejemplo, y observad el resultado de las llamadas a y de las dos clases Platypus1 y Platypus2. Este ejemplo sinttico ilustra el orden de preferencias en funcin del orden de denicin de la herencia en caso de conictos de nombre.

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 codicacin interna. En Python no tenemos palabras clave especcas para denominar la encapsulacin. Todos los mtodos en Python son pblicos, excepto aquellos 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 codicacin interna, que sera privada. Se ha ejemplicado 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.

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,...

Ved tambin El concepto de getter y setter se ha tratado con profundidad en la asignatura Programacin orientada a objetos.

www.detodoprogramacion.com

CC-BY-NC-ND PID_00174138

31

El lenguaje Python

6.4. Polimorsmo En el caso de Python, como en la mayora de lenguajes de programacin, se basa en el uso de herencia. . La palabra polimorsmo* en programacin denomina a la propiedad que tienen muchos lenguajes de ejecutar cdigo distinto en funcin del objeto que hace la llamada.

* Del griego varias formas.

As, podramos referenciar objetos mediante el tipo superclase, pero que en el momento de ejecutar sus mtodos, se llamar realmente a los mtodos de la clase derivada. El concepto de polimorsmo se encuentra muy ligado al enlace dinmico. Python por defecto ya usa el enlace dinmico, con lo que no requiere ninguna notacin especial para usar polimorsmo.

Enlace dinmico El enlace dinmico es la decisin de qu cdigo se ejecuta en tiempo de ejecucin en lugar de en tiempo de compilacin.

www.detodoprogramacion.com

CC-BY-NC-ND PID_00174138

32

El lenguaje Python

7. Python como lenguaje funcional .

La programacin funcional es un paradigma de programacin basado en el concepto matemtico de funcin, no en un sentido procedural como hemos visto hasta ahora, sino ms bien en el uso de funciones de orden superior. Este concepto hace referencia al uso de las funciones como si fueran valores propios del lenguaje. . Es decir, en la programacin funcional podemos guardar una funcin en una variable, para posteriormente aplicarla sobre unos argumentos, permitiendo incluso que una funcin retorne otra funcin como salida.

Las caractersticas funcionales de Python no van a ser las ms utilizadas en este curso, pero en este apartado haremos un breve resumen con algn ejemplo orientativo, puesto que existen algunos iteradores bastante utilizados que se basan en el paradigma funcional. El cdigo 7.1 es un ejemplo en el que se muestra el uso bsico de la programacin funcional, el acceso a las funciones como variables. Cdigo 7.1: Ejemplo simple de aplicacin de Python funcional
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 # 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

www.detodoprogramacion.com

CC-BY-NC-ND PID_00174138

33

El lenguaje Python

caracteres que activa el selector en el diccionario interno a la funcin money. El resultado guardado en f es una funcin, y por tanto puede ser llamado para su ejecucin. Como podis observar, las llamadas money(us)() y f() son equivalentes. A posteriori hemos cambiado el valor donde apunta la funcin f, modicando en consecuencia su codicacin (y por tanto, generando una salida distinta). El paradigma funcional tiene mltiples ventajas y aplicaciones. En este manual nos centraremos en describir tres iteradores que se han usado mucho en conjuncin con las listas: map, lter y reduce. El estudiante familiarizado con los lenguajes LISP o ML ver cierto paralelismo con estos iteradores. El cdigo 7.2 muestra su ejemplo de uso.

Cdigo 7.2: Ejemplo de aplicacin de iteradores


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 # Ejemplo de uso de i t e r a d o r e s def double (num) : return num 2 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: num 2 , 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 = [num 2 for num in l 1 ] ; print print print print l1 l2 , l 5 l3 , l 6 l4 , l 7

print l 8

Observad que la sintaxis de map, lter y reduce es similar. Siempre reciben un primer argumento, que es el nombre de la funcin que van a ejecutar sobre los elementos de la lista (pasada como segundo argumento). En el caso de map, el iterador aplica la funcin a cada elemento de la lista, devolviendo una nueva lista con el resultado de aplicar esta funcin a cada elemento. Por su parte, lter, devuelve una lista con aquellos elementos de la lista original que pasan la evaluacin de la funcin. En este caso la funcin que recibe lter devuelve un valor booleano (true, false) que hace las funciones de seleccin. Finalmente reduce aplica recursivamente la funcin a cada par de elementos de la lista, hasta dejar un solo resultado.

www.detodoprogramacion.com

CC-BY-NC-ND PID_00174138

34

El lenguaje Python

7.1. Funciones lambda Las funciones lambda son funciones annimas denidas en lnea, que no sern referenciadas posteriormente. Se construyen mediante el operador lambda, sin usar el parntesis para indicar los argumentos. Estos van directamente despus del nombre de la funcin, que naliza su declaracin con dos puntos (:). Justo despus, en la misma lnea se escribe el cdigo de la funcin. En el ejemplo anterior se ha incluido la versin de llamada a map, lter y reduce usando funciones lambda. Observad que estas funciones estn limitadas a una sola expresin.

7.2. Comprensin de listas Una sintaxis alternativa a los iteradores anteriores que se est imponiendo en las ltimas versiones de Python es la comprensin de listas. En este caso, se pretende crear una lista a partir de otra lista. La sintaxis es de nuevo muy sencilla, se especica entre corchetes (o parntesis) la expresin a aplicar, seguida de la palabra clave for, la variable a iterar, la palabra clave in y la lista origen. Como se puede observar en el ejemplo anterior, hemos reproducido la funcin que duplicaba cada elemento de la lista aplicando comprensin, y la expresin se leera: para cada num de l1 haz num*2.
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.

Pattern matching

www.detodoprogramacion.com

CC-BY-NC-ND PID_00174138

35

El lenguaje Python

8. Libreras: NumPy PyLab y SciPy .

El cdigo Python se puede agrupar en mdulos y paquetes para mejorar su organizacin y poder reutilizar y compartir todo lo programado. Cada chero equivale a un mdulo. Para poder utilizar cdigo de estos cheros se utiliza la palabra clave import, seguida del nombre del mdulo, del mismo modo que en C usbamos include. Hay que tener en cuenta que import carga literalmente todo el contenido del chero, ejecutando tambin toda la parte ejecutable dentro del mdulo. Es habitual denir mdulos donde slo se denan las funciones y clases que se quieren publicar para evitar ejecuciones involuntarias. Tambin es posible importar slo un objeto concreto que nos interese, esto se hace mediante la construccin from mdulo import nombre del objeto. Las llamadas a objetos suelen ir precedidas con el nombre del mdulo donde se encuentran, para preservar el espacio de nombres y mantener objetos con el mismo nombre en distintos mdulos. Python tiene asociada una variable de entorno (PYTHONPATH) en la que se le indica dnde encontrar (la carpeta concreta) la mayor parte de las libreras integradas en el lenguaje. En caso de crear nuevos mdulos en otra ubicacin distinta del cdigo actual, se puede aadir esta ruta a la variable de entorno PYTHONPATH. Los paquetes no son ms que entidades que organizan los mdulos. Los paquetes tienen su equivalencia con el sistema de carpetas o directorios, donde podemos guardar de forma estructurada diferentes cheros (mdulos). La palabra clave import se utiliza tambin para importar mdulos de los paquetes, y se usa la misma nomenclatura en cuanto a espacio de nombres. As pues, para importar un mdulo llamado moduloEjemplo, del paquete PaquetesEjemplo, seguiramos la sintaxis: import PaquetesEjemplo.moduloEjemplo. Suponiendo que en este mdulo tuviramos de nuevo denida la funcin double, la llamaramos de la siguiente manera: PaquetesEjemplo.moduloEjemplo.double(3), accin que nos devolvera un 6. Esta notacin se puede simplicar notablemente con la palabra clave as. Siguiendo el ejemplo, si importramos el cdigo como: import PaquetesEjemplo.moduloEjemplo as e, podramos llamar posteriormente a la funcin double como e.double(3). En este curso trabajaremos con varios paquetes de Python, pero tres de ellos sern imprescindibles puesto que contienen las principales libreras de machine learning ya implementadas en Python. Se trata de NumPy, PyLab y SciPy.

www.detodoprogramacion.com

CC-BY-NC-ND PID_00174138

36

El lenguaje Python

8.1. NumPy La librera NumPy nos permite trabajar con datos cientcos, 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 se puede bajar y consultar la documentacin de las diferentes propiedades que nos ofrece NumPy, que se centran bsicamente en el tratamiento de matrices y arrays N-dimensionales, y en un conjunto de funcionalidades de lgebra lineal y tratamiento de la seal aplicada al anlisis cientco.
* 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 listo para descargar, con la correspondiente documentacin.
* http://www.scipy.org/PyLab

8.3. SciPy SciPy es una expansin de NumPy, que integra nuevos paquetes para el tratamiento cientco 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/

www.detodoprogramacion.com

CC-BY-NC-ND PID_00174138

37

El lenguaje Python

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.

www.detodoprogramacion.com

CC-BY-NC-ND PID_00174138

38

El lenguaje Python

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 simplicar 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. Codicad una funcin que escriba en un chero de texto los nmeros primos que van desde el 1 hasta el 999.999. 10. Escribid una funcin que lea el contenido de un chero 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 especcos 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 lter 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 nalmente nos devuelva la palabra ejemplo en maysculas.

www.detodoprogramacion.com

CC-BY-NC-ND PID_00174138

39

El lenguaje Python

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).

www.detodoprogramacion.com

www.detodoprogramacion.com

Libros Universitarios, juegos, Revistas, Cursos, Software, Sistemas Operativos, Antivirus y ms Gratis para el Conocimiento...! www.detodoprogramas.com Vistanos y comprubalo

Material para los amantes de la Programacin Java, C/C++/C#,Visual.Net, SQL, Python, Javascript, Oracle, Algoritmos, CSS, Desarrollo Web, Joomla, jquery, Ajax y Mucho Mas www.detodoprogramacion.com Visitanos