Documente Academic
Documente Profesional
Documente Cultură
Septiembre de 2012
GSyC - 2012
Introducci on a Python
c 2012 Grupo de Sistemas y Comunicaciones. Algunos derechos reservados. Este trabajo se distribuye bajo la licencia Creative Commons Attribution Share-Alike disponible en http://creativecommons.org/licenses/by-sa/2.1/es
GSyC - 2012
Introducci on a Python
Contenidos
Introducci on a Python
GSyC - 2012
Introducci on a Python
Introducci on a Python
Contenidos
Introducci on a Python
GSyC - 2012
Introducci on a Python
Introducci on a Python
Caracter sticas
Python es un lenguaje: de alto nivel interpretado orientado a objetos (todo son objetos) din amicamente tipado (frente a est aticamente tipado) fuertemente tipado (frente a d ebilmente tipado) sensible a may usculas/min usculas que cuenta con un int erprete interactivo cuyo c odigo se comprueba en ejecuci on
GSyC - 2012
Introducci on a Python
Introducci on a Python
Un peque no ejemplo
Podemos usar Python como calculadora (ojo: 3/2 = 1) Sensible a may usculas / min usculas Comentarios: #
#!/usr/bin/python print "hola mundo" # esto es un comentario euros=415 pesetas=euros*166.386 print str(euros) + " euros son "+ str(pesetas) + " pesetas"
GSyC - 2012
Introducci on a Python
Introducci on a Python
def a_farenheit(x): """Convierte grados cent grados en grados farenheit""" return (x*1.8)+32
Evitar tabuladores y usar espacios (o congurar el editor para que lo haga autom aticamente)
GSyC - 2012 Introducci on a Python 7
Introducci on a Python
Condicional
Sentencia if:
#!/usr/bin/python x = 3 if x : print verdadero else: print falso
GSyC - 2012
Introducci on a Python
Introducci on a Python
Cadenas
No existe tipo char Comilla simple o doble print "hola" o print hola print me dijo "hola" m as legible que print me dijo \hola\ Puede haber caracteres especiales print "hola\nque tal" El operador + concatena cadenas, y el * las repite un n umero entero de veces Se puede acceder a los caracteres de cadenas mediante ndices y rodajas como en las listas. Pero las cadenas son inmutables
GSyC - 2012
Introducci on a Python
Introducci on a Python
Listas
Tipo de datos predenido en Python, va mucho m as all a de los arrays Es un conjunto indexado de elementos, no necesariamente homog eneos Sintaxis:Identicador de lista, mas ndice entre corchetes Cada elemento se separa del anterior por un caracter ,
a=[rojo,amarillo] a.append(verde) print a print a[2] print len(a) b=[uno,2, 3.0]
GSyC - 2012
Introducci on a Python
10
Introducci on a Python
El primer elemento tiene ndice 0. Un ndice negativo accede a los elementos empezando por el nal de la lista. El u ltimo elemento tiene ndice -1. Pueden referirse rodajas (slices) de listas escribiendo dos ndices entre el caracter : La rodaja va desde el primero, incluido, al u ltimo, excluido. Si no aparece el primero, se entiende que empieza en el primer elemento (0) Si no aparece el segundo, se entiende que termina en el u ltimo elemento (incluido).
GSyC - 2012
Introducci on a Python
11
Introducci on a Python
#!/usr/bin/python a=[0,1,2,3,4] print a # [0, 1, 2, 3, 4] print a[1] # 1 print a[0:2] # [0,1] print a[3:] # [3,4] print a[-1] # 4 print a[:-1] # [0, 1, 2, 3] print a[:-2] # [0, 1, 2]
GSyC - 2012
Introducci on a Python
12
Introducci on a Python
Bucles
Sentencia for:
>>> a = [cat, window, defenestrate] >>> for x in a: ... print x, len(x) ... cat 3 window 6 defenestrate 12 >>> a = [had, a, little, lamb] >>> for i in range(len(a)): ... print i, a[i] ... 0 had 1 a 2 little 3 lamb
GSyC - 2012
Introducci on a Python
13
Introducci on a Python
Diccionarios
Es un conjunto desordenado de elementos Cada elemento del diccionario es un par clave-valor. Se pueden obtener valores a partir de la clave, pero no al rev es. Longitud variable Elementos heterog eneos Hace las veces de los registros en otros lenguajes Atenci on: Se declaran con {}, se reeren con []
GSyC - 2012
Introducci on a Python
14
Introducci on a Python
Asignar valor a una clave existente reemplaza el antiguo Una clave de tipo cadena es sensible a may usculas/min usculas Pueden a nadirse entradas nuevas al diccionario Los diccionarios se mantienen desordenados Los valores de un diccionario pueden ser de cualquier tipo Las claves pueden ser enteros, cadenas y alg un otro tipo Pueden borrarse un elemento del diccionario con del Pueden borrarse todos los elementos del diccionario con clear()
GSyC - 2012
Introducci on a Python
15
Introducci on a Python
M as sobre diccionarios
#!/usr/bin/python pais={de: Alemania, fr: Francia, es: Espa~ na} print pais; print pais["fr"] extension={} extension[py]=python extension[txt]=texto plano extension[ps]=PostScript for x in pais.keys(): print x, pais[x] del pais[fr] print len(pais) print pais.has_key(es) pais.clear()
GSyC - 2012
Introducci on a Python
16
Introducci on a Python
Importar m odulos
import nombre-m odulo permite acceder a los s mbolos del m odulo con la sintaxis nombre-m odulo.X from nombre-m odulo import a, b, c incorpora los s mbolos a, b, c al espacio de nombres, siendo accesibles directamente (sin cualicarlos con el nombre del m odulo) from nombre-m odulo import * incorpora los s mbolos del m odulo al espacio de nombres, siendo accesibles directamente (sin cualicarlos con el nombre del m odulo).
GSyC - 2012
Introducci on a Python
17
Introducci on a Python
Ficheros
write(cadena) escribe la cadena en el chero read() devuelve el contenido del chero readlines() devuelve una lista con cada l nea del chero close() cierra el chero
GSyC - 2012
Introducci on a Python
18
Introducci on a Python
#!/usr/bin/python fich=open(/tmp/prueba,w) fich.write("lunes\n") fich.close() fich=open(/tmp/prueba,a) fich.write("martes\n") fich.close() fich=open(/etc/hosts,r) maquinas=fich.read() fich.close() fich=open(/etc/hosts,r) maquinas=fich.readlines() fich.close() for maquina in maquinas: print maquina,
GSyC - 2012
Introducci on a Python
19
Introducci on a Python
Denici on de variables
Python es fuertemente tipado (frente a d ebilmente tipado) sensible a may usculas/min usculas En Python la declaraci on de variables es impl cita (no hay declaraci on expl cita) Las variables nacen cuando se les asigna un valor Las variables desaparecen cuando se sale de su ambito
GSyC - 2012
Introducci on a Python
20
Introducci on a Python
Las sentencias se terminan al acabarse la l nea (salvo casos especiales donde la sentencia queda abierta: en mitad de expresiones entre par entesis, corchetes o llaves). El caracter \ se utiliza para extender una sentencia m as all a de una linea, en los casos en que no queda abierta. El caracter : se utiliza como separador en sentencias compuestas. Ej.: para separar la denici on de una funci on de su c odigo. El caracter ; se utiliza como separador de sentencias escritas en la misma l nea.
GSyC - 2012
Introducci on a Python
21
Introducci on a Python
Tuplas
Tipo predenido de Python para una lista inmutable. Se dene de la misma manera, pero con los elementos entre par entesis. Las tuplas no tienen m etodos: no se pueden a nadir elementos, ni cambiarlos, ni buscar con index(). S puede comprobarse la existencia con el operador in.
>>> t = ("a", "b", "mpilgrim", "z", "example") >>> t[0] a >>> a in t True >>> t[0] = "b" Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: object doesnt support item assignment
GSyC - 2012
Introducci on a Python
22
Introducci on a Python
Utilidad de las tuplas: Son m as r apidas que las listas Pueden ser una clave de un diccionario (no as las listas) Se usan en el formateo de cadenas tuple(li) devuelve una tupla con los elementos de la lista li list(t) devuelve una lista con los elementos de la tupla t
GSyC - 2012
Introducci on a Python
23
Introducci on a Python
Funciones predenidas
abs() valor absoluto float() convierte a oat int() convierte a int str() convierte a string round() redondea raw_input() acepta un valor desde teclado
GSyC - 2012
Introducci on a Python
24
Introducci on a Python
Operadores
En orden de precedencia decreciente:
+x, -x, ~x Unary operators x ** y Power x * y, x / y, x % y Multiplication, division, modulo x + y, x - y Addition, subtraction x << y, x >> y Bit shifting x & y Bitwise and x | y Bitwise or x < y, x <= y, x > y, x >= y, x == y, x != y, x <> y, x is y, x is not y, x in s, x not in s Comparison, identity, sequence membership tests not x Logical negation x and y Logical and lambda args: expr Anonymous function
GSyC - 2012
Introducci on a Python
25
Introducci on a Python
La declaraci on impl cita de variables como en perl puede provocar resultados desastrosos
#!/usr/bin/perl $sum_elementos= 3 + 4 + 17; $media=suma_elementos / 3; # deletreamos mal la variable print $media; # y provocamos resultado incorrecto
Pero Python no permite referenciar variables a las que nunca se ha asignado un valor.
#!/usr/bin/python sum_elementos= 3 + 4 + 17 media=suma_elementos / 3 # deletreamos mal la variable print media; # y el compilador nos avisa con un error
GSyC - 2012
Introducci on a Python
26
Introducci on a Python
Introducci on a Python
devuelve el n umero de elementos de d devuelve 1 si existe la clave k en d, 0 en caso contrario equivale a: d.has_key(k) devuelve la lista de elementos de d devuelve la lista de claves de d devuelve la lista de valores de d
GSyC - 2012
Introducci on a Python
28
Introducci on a Python
M as sobre cadenas
#!/usr/bin/python import string a="m as vale p ajaro en mano" print string.split(a) print string.upper(a) b="que,cocodrilo,en,tobillo" print string.split(b,,) c=[rojo,amarillo,verde] print string.join(c)
GSyC - 2012
Introducci on a Python
29
Introducci on a Python
#!/usr/bin/python x = int(raw_input("Please enter an integer: ")) if x < 0: x = 0 print Negative changed to zero elif x == 0: print Zero elif x == 1: print Single else: print More
No existe switch/case
GSyC - 2012
Introducci on a Python
30
Introducci on a Python
Dentro de una funci on se puede ver una variable global pero no modicar
GSyC - #!/usr/bin/python 2012 Introducci on a Python 31
Introducci on a Python
GSyC - 2012
Introducci on a Python
32
Introducci on a Python
Un poco m as complicado:
#!/usr/bin/python c=5 def f(x): c=4 #ahora c es variable local return x+c print f(3) print c # 7 # 5
GSyC - 2012
Introducci on a Python
33
Introducci on a Python
M as sobre listas
append() a nade un elemento al nal de la lista insert() inserta un elemento en la posici on indicada
>>> li [a, b, mpilgrim, z, example] >>> li.append("new") >>> li [a, b, mpilgrim, z, example, new] >>> li.insert(2, "new") >>> li [a, b, new, mpilgrim, z, example, new]
GSyC - 2012
Introducci on a Python
34
Introducci on a Python
index() busca en la lista un elemento y devuelve el ndice de la primera aparici on del elemento en la lista. Si no aparece se eleva una excepci on. El operador in devuelve 1 si un elemento aparece en la lista, y 0 en caso contrario.
>>> li [a, b, new, mpilgrim, z, example, new] >>> li.index("example") 5 >>> li.index("new") 2 >>> li.index("c") Traceback (innermost last): File "<interactive input>", line 1, in ? ValueError: list.index(x): x not in list >>> "c" in li 0
GSyC - 2012
Introducci on a Python
35
Introducci on a Python
remove() elimina la primera aparici on de un elemento en la lista. Si no aparece, eleva una excepci on. pop() devuelve el u ltimo elemento de la lista, y lo elimina. (Pila) pop(0) devuelve el primer elemento de la lista, y lo elimina. (Cola)
>>> li [a, b, new, mpilgrim, z, new, two, elements] >>> li.remove("new") >>> li [a, b, mpilgrim, z, new, two, elements] >>> li.remove("c") Traceback (innermost last): File "<interactive input>", line 1, in ? ValueError: list.remove(x): x not in list >>> li.pop() elements >>> li [a, b, mpilgrim, z, new, two]
GSyC - 2012 Introducci on a Python 36
Introducci on a Python
El operador + concatena dos listas, devolviendo una nueva lista El operador * concatena repetitivamente una lista a s misma
>>> li = [a, b, mpilgrim] >>> li = li + [example, new] >>> li [a, b, mpilgrim, example, new] >>> li += [two] >>> li [a, b, mpilgrim, example, new, two] >>> li = [1, 2] * 3 >>> li [1, 2, 1, 2, 1, 2]
GSyC - 2012
Introducci on a Python
37
Introducci on a Python
sort() ordena una lista. Puede recibir opcionalmente un argumento especicando una funci on de comparaci on, lo que enlentece notable su funcionamiento reverse() invierte las posiciones de los elementos en una lista. Ninguno de estos m etodos devuelve nada, simplemente alteran la lista sobre la que se aplican.
>>> li = [a, b, new, mpilgrim, z, example, new, two, el >>> li.sort() >>> li [a, b, elements, example, mpilgrim, new, new, two, z] >>> li.reverse() >>> li [z, two, new, new, mpilgrim, example, elements, b, a]
GSyC - 2012
Introducci on a Python
38
Introducci on a Python
Un programa en Python
def buildConnectionString(params): """Build a connection string from a dictionary of parameters. Returns string.""" return ";".join(["%s=%s" % (k, v) for k, v in params.items()]) if __name__ == "__main__": myParams = {"server":"mpilgrim", \ "database":"master", \ "uid":"sa", \ "pwd":"secret" \ } print buildConnectionString(myParams)
Ejecuci on:
xterm$ python odbchelper.py server=mpilgrim;uid=sa;database=master;pwd=secret
GSyC - 2012 Introducci on a Python 39
Introducci on a Python
El atributo
name
de un m odulo
Los m odulos son objetos, con ciertos atributos predenidos. El atributo __name__: si el m odulo es importado (con import), contiene el nombre del chero, sin trayecto ni extensi on si el m odulo es un programa que se ejecuta s olo, contiene el valor __main__ Puede escribirse ejecuci on condicionada a c omo se use el m odulo:
if __name__ == "__main__": ...
GSyC - 2012
Introducci on a Python
40
Introducci on a Python
GSyC - 2012
Introducci on a Python
41
Introducci on a Python
Mapeo de listas
Se puede mapear una lista en otra, aplicando una funci on a cada elemento de la lista:
>>> >>> [2, >>> [1, >>> >>> [2, li = [1, 9, 8, 4] [elem*2 for elem in li] 18, 16, 8] li 9, 8, 4] li = [elem*2 for elem in li] li 18, 16, 8]
GSyC - 2012
Introducci on a Python
42
Introducci on a Python
Filtrado de listas
Sintaxis:
[expresi on-mapeo for elemento in lista-orig if condici on-filtrado]
Ejemplos:
>>> li = ["a", "mpilgrim", "foo", "b", "c", "b", "d", "d"] >>> [elem for elem in li if len(elem) > 1] 1 [mpilgrim, foo]
GSyC - 2012
Introducci on a Python
43
Introducci on a Python
Control de ujo
Sentencia while:
>>> a, b = 0, 1 >>> while b < 1000: ... print b, ... a, b = b, a+b ... 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
N otese el efecto de un caracter , al nal de un print N otese otro modelo de asignaci on m ultiple
GSyC - 2012
Introducci on a Python
44
Introducci on a Python
equivale a
#!/usr/bin/python a=10 while 1: print a, if a==1: break a=a-1
GSyC - 2012
Introducci on a Python
45
Introducci on a Python
GSyC - 2012
Introducci on a Python
46
Introducci on a Python
Uso de bibliotecas
Llamada al shell
#!/usr/bin/python import os os.system(ls -l)
Las funciones de biblioteca podemos encontrarlas en la python library reference (disponible en el web en muchos formatos)
GSyC - 2012 Introducci on a Python 47
Introducci on a Python
Excepciones
GSyC - 2012
Introducci on a Python
48
Introducci on a Python
GSyC - 2012
Introducci on a Python
49
Introducci on a Python
Se puede indicar una acci on para cualquier excepci on pero es muy desaconsejable (enmascara otros errores) El programador puede levantar excepciones
#!/usr/bin/python try: x=int(raw_input("Introduce un no :")) print x except : # para cualquier excepci on print ("N umero incorrecto") raise SystemExit print "nunca se ejecuta"
GSyC - 2012
Introducci on a Python
50
Introducci on a Python
Objetos en Python
Todo son objetos, en sentido amplio: Cualquier objeto puede ser asignado a una variable o pasado como par ametro a una funci on Algunos objetos pueden no tener ni atributos ni m etodos Algunos objetos pueden no permitir que se herede de ellos Ejemplos de objetos Python: Strings, listas, funciones, m odulos. . .
GSyC - 2012
Introducci on a Python
51
Introducci on a Python
Tipo:
Nunca cambia. La funci on type() devuelve el tipo de un objeto (que es otro objeto)
Valor:
Objetos inmutables: su valor no puede cambiar Objetos mutables: su valor puede cambiar
Contenedores: objetos que contienen referencias a otros objetos (ej.: tuplas, listas, diccionarios).
GSyC - 2012
Introducci on a Python
52
Introducci on a Python
Cadenas de documentaci on
No son obligatorias pero s muy recomendables (varias herramientas hacen uso de ellas). La cadena de documentaci on de un objeto es su atributo __doc__ En una sola l nea para objetos sencillos, en varias para el resto de los casos. Entre triples comillas-dobles (incluso si ocupan una l nea). Si hay varias l neas: La primera l nea debe ser una resumen breve del prop osito del objeto. Debe empezar con may uscula y acabar con un punto Una l nea en blanco debe separar la primera l nea del resto Las siguientes l neas deber an empezar justo debajo de la primera comilla doble de la primera l nea
GSyC - 2012
Introducci on a Python
53
Introducci on a Python
De varias:
def complex(real=0.0, imag=0.0): """Form a complex number. Keyword arguments: real -- the real part (default 0.0) imag -- the imaginary part (default 0.0) """ if imag == 0.0 and real == 0.0: return complex_zero
GSyC - 2012
Introducci on a Python
54
Introducci on a Python
Permite documentar el c odigo -generalmente las funciones- dentro del propio c odigo Genera la documentaci on del c odigo en formatos legibles y navegables (HTML, PDF...) Se basa en un lenguaje de marcado simple PERO... hay que mantener la documentaci on al d a cuando se cambia el c odigo
GSyC - 2012
Introducci on a Python
55
Introducci on a Python
Ejemplo
def interseccion(m, b): """ Devuelve la interseccion de la curva M{y=m*x+b} con el eje X. Se trata del punto en el que la curva cruza el eje X (M{y=0}). @type @param @type @param m: m: b: b: numero La pendiente de la curva numero La intersecci on con el eje Y
@rtype: numero @return: la interseccion con el eje X de la curva M{y=m*x+b}. """ return -b/m
GSyC - 2012
Introducci on a Python
56
Introducci on a Python
Orientaci on a objetos
Modelo de clases cl asico En cada m odulo (chero) una o varias clases Todo en Python es un objeto (incluso una funci on) Los m etodos de una clase se declaran como funciones M etodo init : inicializaci on en el momento de la instanciaci on Argumento self pasado a cada m etodo: referencia al propio objeto Todos los m etodos incluyen un argumento self
GSyC - 2012
Introducci on a Python
57
Introducci on a Python
class aClass (parentClass) """Description of the class""" def method1 (self) """Description of method1""" codeForMethod1 def __init__ (self, arg) """Description for initialization""" codeForInit
GSyC - 2012
Introducci on a Python
58
Introducci on a Python
# Instantiation anObject = aClass (arg) # Calling method1 anObject.method1 () # Calling a parent method anObject.methodParent ()
GSyC - 2012
Introducci on a Python
59
Introducci on a Python
Referencias
http://www.python.org/doc Documentaci on en l nea de Python (incluyendo un Tutorial, los manuales de referencia, HOWTOS, etc. Usa la versi on para Python 2.x http://www.diveintopython.org/ Dive into Python, por Mark Pilgrim. Libro para aprender Python, orientado a quien ya sabe programa con lenguajes orientados a objetos. http: //wiki.python.org/moin/BeginnersGuide/Programmers Otros textos sobre Python, de inter es especialmente para quien ya sabe programar en otros lenguajes. http://python.net/~goodger/projects/pycon/2007/ idiomatic/ Code Like a Pythonista: Idiomatic Python, por David Goodger
GSyC - 2012 Introducci on a Python 60
Introducci on a Python
Referencias (2)
http://en.wikibooks.org/wiki/Python_Programming Python Programming, Wikibook sobre programaci on en Python. http://en.wikipedia.org/wiki/Python_(programming_ language) Python en la Wikipedia http://code.google.com/intl/es-ES/edu/languages/ google-python-class/ Google Python Class, Tutorial con v deos y ejercicios muy interesante
GSyC - 2012
Introducci on a Python
61