0% encontró este documento útil (0 votos)
61 vistas

Programacion en Python I

Cargado por

valeriaeh
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
61 vistas

Programacion en Python I

Cargado por

valeriaeh
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 84

Programacin en Python o

Departamento de Sistemas Telemticos y Computacin (GSyC) a o


gsyc-profes (arroba) gsyc.es

Marzo de 2010

GSyC - 2010

Programacin en Python o

c 2010 GSyC Algunos derechos reservados. Este trabajo se distribuye bajo la licencia Creative Commons Attribution Share-Alike 3.0

GSyC - 2010

Programacin en Python o

Contenidos
1 2

El Lenguaje Python Programacin en Python o Tipos de objeto Cadenas Listas Diccionarios Tuplas Cadenas Unicode Sentencias de control Funciones Ficheros Cadenas de documentacin o Excepciones Librer as Librer commands a Librer sys a Librer os, shutil as
Programacin en Python o 3

GSyC - 2010

El Lenguaje Python

El Lenguaje Python

Lenguaje de autor creado por Guido van Rossum en 1989 Muy relacionado originalmente con el S.O. Amoeba Disponible en Unix, Linux, MacOS, Windows, Libre Lenguaje de Script Orientado a Objetos (no muy puro) Muy alto nivel Librer muy completa a

GSyC - 2010

Programacin en Python o

El Lenguaje Python

Verdadero lenguaje de propsito general o Sencillo, compacto Sintaxis clara Interpretado => Lento Ofrece persistencia Recolector de basuras Muy maduro y muy popular Aplicable para software de uso general

GSyC - 2010

Programacin en Python o

El Lenguaje Python

Programa python for x in xrange(1000000): print x Su equivalente Java public class ConsoleTest { public static void main(String[] args) { for (int i = 0; i < 1000000; i++) { System.out.println(i); } } }

GSyC - 2010

Programacin en Python o

El Lenguaje Python

Programa python
for i in xrange(1000): x={} for j in xrange(1000): x[j]=i x[j]

Su equivalente Java
import java.util.Hashtable; public class HashTest { public static void main(String[] args) { for (int i = 0; i < 1000; i++) { Hashtable x = new Hashtable(); for (int j = 0; j < 1000; j++) { x.put(new Integer(i), new Integer(j)); x.get(new Integer(i)); } } } }

GSyC - 2010

Programacin en Python o

El Lenguaje Python

Librer as

Python dispone de librer Nativas y Normalizadas para as Cadenas, listas, tablas hash, pilas, colas Nmeros Complejos u Serializacin, Copia profunda y Persistencia de Objetos o Regexp Unicode, Internacionalizacin del Software o Programacin Concurrente o Acceso a BD, Ficheros Comprimidos, Control de Cambios...

GSyC - 2010

Programacin en Python o

El Lenguaje Python

Librer relacionadas con Internet: as CGIs, URLs, HTTP, FTP, pop3, IMAP, telnet Cookies, Mime, XML, XDR Diversos formatos multimedia Criptograf a

GSyC - 2010

Programacin en Python o

El Lenguaje Python

La referencia sobre todas las funciones de librer podemos a encontrarlas en la documentacin ocial, disponible en el web en o muchos formatos Hasta la versin 2.5.4 (diciembre de 2008), se denomina o python library reference Desde la versin 2.6, se denomina python standard library o

GSyC - 2010

Programacin en Python o

10

El Lenguaje Python

Inconvenientes de Python
Adems de su velocidad limitada y necesidad de intrprete a e (Como todo lenguaje interpretado) No siempre compatible hacia atrs a Uniformidad. Ej: funcin len(), mtodo o e Algunos aspectos de la OO
Python is a hybrid language. It has functions for procedural programming and objects for OO programming. Python bridges the two worlds by allowing functions and methods to interconvert using the explicit self parameter of every method def. When a function is inserted into an object, the rst argument automagically becomes a reference to the receiver.

items()

...

GSyC - 2010

Programacin en Python o

11

Programacin en Python o

El intrprete de python se puede usar e En modo interactivo


koji@mazinger:~$ python Python 2.5.2 (r252:60911, Oct 5 2008, 19:24:49) [GCC 4.3.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> print "hola mundo" hola mundo >>> 3/2 1 >>> 3/2.0 1.5

Mediante scripts
#!/usr/bin/python -tt print "hola mundo" #esto es un comentario euros=415 pesetas=euros*166.386 print str(euros) + " euros son "+ str(pesetas) + " pesetas"

GSyC - 2010

Programacin en Python o

12

Programacin en Python o

La l nea #!/usr/bin/python indica al S.O. dnde est el o a intrprete que sabe procesar el fuente e Debe ser exactamente la primera l nea No puede haber espacios entre la admiracin y la barra o
#Este ejemplo es doblemente incorrecto #! /usr/bin/python -tt # MAL!

En distintos Unix el intrprete puede estar en distintos sitios. Para e aumentar la compatibilidad, a veces se usa
#!/usr/bin/env python print "Hola mundo"

Aunque (en Linux) esto no permite pasar parmetros como -tt a


GSyC - 2010 Programacin en Python o 13

Programacin en Python o

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 - 2010

Programacin en Python o

14

Programacin en Python o

Identicadores (nombre de objetos, de funciones...): Letras inglesas de a a z, en maysculas o minsculas. Barra u u baja y nmeros u Sensible a maysculas/minsculas u u Se puede usar utf-8 y latin-1 en las cadenas y comentarios
Si el editor no marca adecuadamente la codicacin del o chero, aparecer un error a
SyntaxError: Non-ASCII character \xc3 in file ./holamundo.py on line 4, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

y ser necesario aadir en la segunda l a n nea del fuente


# -*- coding: utf-8 -*-

o bien
# -*- coding: iso-8859-1 -*-

Python es Dinmicamente tipado (frente a estticamente tipado) a a Fuertemente tipado (frente a dbilmente tipado) e
GSyC - 2010 Programacin en Python o 15

Programacin en Python o

En Python la declaracin de variables es impl o cita (no hay declaracin expl o cita) Las variables nacen cuando se les asigna un valor Las variables desaparecen cuando se sale de su mbito a La declaracin impl o 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 intprete nos avisa con un error e
GSyC - 2010 Programacin en Python o 16

Programacin en Python o

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 - 2010

Programacin en Python o

17

Programacin en Python o

Sangrado y separadores de sentencias


En Python NO hay llaves ni begin-end para encerrar bloques de cdigo! Un mayor nivel de sangrado indica que comienza o un bloque, y un menor nivel indica que termina un bloque. Las sentencias se terminan al acabarse la l nea (salvo casos especiales donde la sentencia queda abierta: en mitad de expresiones entre parntesis, corchetes o llaves). e El carcter \ se utiliza para extender una sentencia ms a a all de una linea, en los casos en que no queda abierta. a El carcter : se utiliza como separador en sentencias a compuestas. Ej.: para separar la denicin de una funcin de o o su cdigo. o El carcter ; se utiliza como separador de sentencias escritas a en la misma l nea.
GSyC - 2010 Programacin en Python o 18

Programacin en Python o

La recomendacin ocial es emplear 4 espacios o


PEP-8 Style Guide for Python Code David Goodger, Code Like a Pythonista: Idiomatic Python Traduccin al espaol: o n Programa como un Pythonista: Python Idiomtico a

Emplear 8 espacios o emplear tabuladores es legal Mezclar espacios con tabulares es muy peligroso. Para que el intrprete lo advierta e
#!/usr/bin/python -t

Para que el intrprete lo prohiba e


#!/usr/bin/python -tt

GSyC - 2010

Programacin en Python o

19

Programacin en Python o

Tipos de objeto

Tipos de objeto
En python todo son objetos: cadenas, listas, diccionarios, funciones, mdulos. . . o En los lenguajes de scripting ms antiguos como bash o tcl, el a unico tipo de datos es la cadena Los lenguajes imperativos ms habituales (C, C++, a pascal. . . ) suelen tener (con variantes) los tipos: booleano, carcter, cadena, entero, real y matriz a Python tiene booleanos, enteros, reales y cadenas. Y adems, a cadenas unicode, listas, tuplas, nmeros complejos, u diccionarios, conjuntos...
En terminolog python se denominan tipos de objeto a Estos tipos de objeto de alto nivel facilitan mucho el trabajo del programador

GSyC - 2010

Programacin en Python o

20

Programacin en Python o

Tipos de objeto

Comprobacin de tipos o
#!/usr/bin/python -tt import types if type("a") == types.StringType: print "ok, es una cadena" else: print "no es una cadena"

Tipos de objeto habituales:


BooleanType IntType LongType FloatType StringType ListType TupleType DictType

GSyC - 2010

Programacin en Python o

21

Programacin en Python o

Cadenas

Cadenas

No existe tipo char Comilla simple o doble print "hola" print hola print me dijo "hola" ms legible que print me dijo \hola\ a Puede haber caracteres especiales print "hola\nque tal" Cadenas crudas print r"""hola\nque tal"""

GSyC - 2010

Programacin en Python o

22

Programacin en Python o

Cadenas

Una cadena se puede expandir en ms de una l a nea print "hola\ que tal " El operador + concatena cadenas, y el * las repite un nmero u entero de veces Se puede acceder a los caracteres de cadenas mediante ndices y rodajas como en las listas Las cadenas son inmutables. Ser errneo a[1]=... a o

GSyC - 2010

Programacin en Python o

23

Programacin en Python o

Listas

Listas
Tipo de datos predenido en Python, va mucho ms all de a a los arrays Es un conjunto indexado de elementos, no necesariamente homogneos e Sintaxis:Identicador de lista, mas ndice entre corchetes Cada elemento se separa del anterior por un carcter , a
a=[rojo,amarillo] a.append(verde) print a print a[2] print len(a) b=[uno,2, 3.0]

GSyC - 2010

Programacin en Python o

24

Programacin en Python o

Listas

El primer elemento tiene ndice 0. Un ndice negativo accede a los elementos empezando por el nal de la lista. El ultimo elemento tiene ndice -1. Pueden referirse rodajas (slices) de listas escribiendo dos ndices entre el carcter : a La rodaja va desde el primero, incluido, al ultimo, 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 ultimo elemento (incluido).

GSyC - 2010

Programacin en Python o

25

Programacin en Python o

Listas

#!/usr/bin/python -tt 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]

La misma sintaxis se aplica a las cadenas


a="ni~o" n print a[-1]

GSyC - 2010

Programacin en Python o

26

Programacin en Python o

Listas

append() aade un elemento al nal de la lista n insert() inserta un elemento en la posicin indicada o
>>> li [a, b, blablabla, z, example] >>> li.append("new") >>> li [a, b, blablabla, z, example, new] >>> li.insert(2, "new") >>> li [a, b, new, blablabla, z, example, new]

GSyC - 2010

Programacin en Python o

27

Programacin en Python o

Listas

index() busca en la lista un elemento y devuelve el ndice de la primera aparicin del elemento en la lista. Si no aparece se o eleva una excepcin. o El operador in devuelve true si un elemento aparece en la lista, y false en caso contrario.
>>> li [a, b, new, blablabla, 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 - 2010

Programacin en Python o

28

Programacin en Python o

Listas

remove() elimina la primera aparicin de un elemento en la o lista. Si no aparece, eleva una excepcin. o pop() devuelve el ultimo 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, blablabla, z, example, new, two, elements] >>> li.remove("new") >>> li [a, b, blablabla, z, example, 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, blablabla, z, example, new, two]

GSyC - 2010

Programacin en Python o

29

Programacin en Python o

Listas

El operador + concatena dos listas, devolviendo una nueva lista El operador * concatena repetitivamente una lista a s misma
>>> li = [a, b, blablabla] >>> li = li + [example, new] >>> li [a, b, blablabla, example, new] >>> li += [two] >>> li [a, b, blablabla, example, new, two] >>> li = [1, 2] * 3 >>> li [1, 2, 1, 2, 1, 2]

GSyC - 2010

Programacin en Python o

30

Programacin en Python o

Listas

Inversin de una lista o

El mtodo reverse() invierte las posiciones de los elementos e en una lista. No devuelve nada, simplemente altera la lista sobre la que se aplican.
>>> a=[sota, caballo, rey] >>> a.reverse() >>> print a [rey, caballo, sota]

GSyC - 2010

Programacin en Python o

31

Programacin en Python o

Listas

Ordenar una lista

La funcin sorted() devuelve una lista ordenada (no la o modica) El mtodo sort() ordena una lista (Modica la lista, e devuelve None) Ambas admiten personalizar la ordenacin, pasando como o argumento una funcin que compare dos elementos y devuelva o Un valor negativo si estn ordenados a Cero si son iguales Un valor positivo si estn desordenados a

GSyC - 2010

Programacin en Python o

32

Programacin en Python o

Listas

#!/usr/bin/python -tt mi_lista=[ "gamma", "alfa", "beta"] print sorted(mi_lista) print mi_lista # alfa, beta, gamma # gamma, alfa, beta. No ha cambiado.

print mi_lista.sort() # Devuelve None print mi_lista # alfa, beta, gamma. La ha ordenado

GSyC - 2010

Programacin en Python o

33

Programacin en Python o

Listas

#!/usr/bin/python -tt mi_lista=[ [IV,4] , [XX,20], [III,3] def mi_ordena(a,b): if a[1] < b[1]: return -1 elif a[1] > b[1]: return 1 else: return 0 mi_lista.sort(mi_ordena) print mi_lista

GSyC - 2010

Programacin en Python o

34

Programacin en Python o

Listas

Split, join
Es muy frecuente trocear una cadena para formar en un lista (split) y concatenar los elementos de una lista para formar una cadena (join)
#!/usr/bin/python -tt mi_cadena="esto es una prueba" print mi_cadena.split() # [esto, es, una, prueba] print "esto-tambien".split("-") # [esto, tambien]

mi_lista=["as","dos","tres"] print mi_lista.join() # ERROR! Parecera lgico que join() o # fuera un mtodo del tipo lista. Pero no e # lo es print "".join(mi_lista) # Es un mtodo del tipo string, hay e # que invocarlo desde una cadena cualquiera. # Devuelve "asdostres"

GSyC - 2010

Programacin en Python o

35

Programacin en Python o

Listas

Otros mtodos de los objetos string e


#!/usr/bin/python -tt print "hola mundo".upper(); # HOLA MUNDO print "HOLA MUNDO".lower(); # hola mundo # Estos mtodos devuelven una cadena, e # sin modificar la cadena original a="prueba" print a.upper(); # PRUEBA print a; # prueba # find() indica la posicin de una subcadena o print "buscando una subcadena".find("una") # 9 print "buscando una subcadena".find("nohay") # -1 # strip() devuelve una copia de la cadena quitando # espacios a derecha e izda, retornos de carro, etc print " hola \n".strip() # hola

GSyC - 2010

Programacin en Python o

36

Programacin en Python o

Listas

En las primeras versiones de python no hab mtodos para los a e objetos de tipo string, se usaban funciones de un mdulo string. o A partir de python 2.x esta forma se va considerando obsoleta, en python 3.x desaparece
#!/usr/bin/python -tt import string a="ms vale pjaro en mano" a a print string.split(a) print string.upper(a) c=[rojo,amarillo,verde] print string.join(c)

Mtodos actuales para tratar cadenas: Built-in Types, String e Methods Funciones antiguas: String module

GSyC - 2010

Programacin en Python o

37

Programacin en Python o

Listas

Nombres de objeto
Con frecuencia se habla de variables, porque es el trmino e tradicional. Pero Python no tiene variables, sino nombres. Son referencias a objetos
#!/usr/bin/python -tt x=[uno] y=x # y apunta al mismo objeto print x # [uno] print y # [uno] x=[dos] print x print y # x apunta a un nuevo objeto # [dos] # [uno] # El objeto nuevo # El objeto antiguo

x=[uno] y=x # y apunta al mismo objeto x.append(dos) # modificamos el objeto print x # [uno,dos] # el objeto modificado print y # [uno,dos] # el mismo objeto, modificado

GSyC - 2010

Programacin en Python o

38

Programacin en Python o

Diccionarios

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 revs. e Longitud variable Hace las veces de los registros en otros lenguajes Atencin: Se declaran con {}, se reeren con [] o

GSyC - 2010

Programacin en Python o

39

Programacin en Python o

Diccionarios

Asignar valor a una clave existente reemplaza el antiguo Una clave de tipo cadena es sensible a maysculas/minsculas u u Pueden aadirse entradas nuevas al diccionario n Los diccionarios se mantienen desordenados Los valores de un diccionario pueden ser de cualquier tipo Las claves pueden ser enteros, cadenas y algn otro tipo u Pueden borrarse un elemento del diccionario con del Pueden borrarse todos los elementos del diccionario con clear()

GSyC - 2010

Programacin en Python o

40

Programacin en Python o

Diccionarios

Otras operaciones con diccionarios:


len(d) d.has_key(k) k in d d.items() d.keys() devuelve el nmero de elementos de d u 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 (pares clave:valor) devuelve la lista de claves de d

GSyC - 2010

Programacin en Python o

41

Programacin en Python o

Diccionarios

#!/usr/bin/python -tt pais={de: Alemania, fr: Francia, es: Espa~a} n print pais print pais["fr"] extension={} extension[py]=python extension[txt]=texto plano extension[mp3]=MPEG layer 3 for x in pais.keys(): print x, pais[x] del pais[fr] # Borramos francia print len(pais) # Quedan 2 paises print pais.has_key(es) # True pais[es]="Spain" # modificamos un elemento pais.clear() # Borramos todas las claves

GSyC - 2010

Programacin en Python o

42

Programacin en Python o

Diccionarios

#!/usr/bin/python -tt diccionario={"juan": ["empanada"] , "maria": ["refrescos","vino"]} diccionario["luis"]=["patatas fritas","platos plastico"] diccionario["luis"].append("vasos plastico") claves=diccionario.keys() claves.sort() for clave in claves: print clave, diccionario[clave]

Resultado de la ejecucin: o
juan [empanada] luis [patatas fritas, platos plastico, vasos plastico] maria [refrescos, vino]

GSyC - 2010

Programacin en Python o

43

Programacin en Python o

Tuplas

Tuplas
Tipo predenido de Python para una lista inmutable. Se dene de la misma manera, pero con los elementos entre parntesis. e Las tuplas no tienen mtodos: no se pueden aadir elementos, ni e n cambiarlos, ni buscar con index(). S puede comprobarse la existencia con el operador in.
>>> t = ("a", "b", "blablabla", "z", "example") >>> t[0] a >>> a in t 1 >>> t[0] = "b" Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: object doesnt support item assignment

GSyC - 2010

Programacin en Python o

44

Programacin en Python o

Tuplas

Utilidad de las tuplas: Son ms rpidas que las listas a a 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 - 2010

Programacin en Python o

45

Programacin en Python o

Tuplas

Asignaciones mltiples y rangos u

Pueden hacerse tambin tuplas de variables: e


>>> v = (a, b, e) >>> (x, y, z) = v >>> x a

La funcin range() permite generar listas al vuelo: o


>>> [0, >>> ... >>> 0 >>> 6 range(7) 1, 2, 3, 4, 5, 6] (MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY) = range(7) MONDAY SUNDAY

GSyC - 2010

Programacin en Python o

46

Programacin en Python o

Cadenas Unicode

Unicode en Python
Hasta los aos 90, en prcticamente cualquier mbito de la n a a informtica, un carcter equival a un byte. Pero empleando a a a alguna codicacin ASCII extendido, como UTF-8, esto ya no es o cierto
>>> pais={es:espa~a} n >>> print pais {es: espa\xc3\xb1a} >>> print pais[es] espa~a n

\xc3\xb1 signica C3 en hexadecimal, B1 en hexadecimal (Letra ee en UTF-8) n Cuando imprimimos el diccionario, se muestra la representacin interna de la ee o n Cuando imprimimos la cadena, python muestra correctante el grafema correspondiente
GSyC - 2010 Programacin en Python o 47

Programacin en Python o

Cadenas Unicode

Cuando imprimimos la cadena completa, python la muestra correctamente Cuando imprimimos cada elemento, no
#!/usr/bin/python -tt # -*- coding: utf-8 -*cadena="Procesa bien el espa~ol?" n print cadena indice = 0 while indice < len(cadena): letra = cadena[indice] print letra, indice=indice+1

Resultado:
Procesa bien el espa~ol? n ? ? P r o c e s a b i e n e l e s p a ? ? o l ?

GSyC - 2010

Programacin en Python o

48

Programacin en Python o

Cadenas Unicode

Cadenas Unicode
En python 2.0 aparecen las cadenas unicode Se crean anteponiendo u
cadena_unicode=u"Con cadenas unicode se trabaja mejor en espa~ol" n

Es un tipo muy similar a la cadena ordinaria de 8 bits, el intrprete hace las conversiones automticamente cuando es e a necesario Es recomendable que en todos nuestos scripts usemos cadenas unicode y no las tradicionales En el ejemplo anterior, basta con usar una cadena unicode para generar una salida correcta cadena=u"Procesa bien el espa~ol?" n
Procesa bien el espa~ol? n P r o c e s a b i e n e l e s p a ~ o l ? n

GSyC - 2010

Programacin en Python o

49

Programacin en Python o

Cadenas Unicode

Para escribir cadenas unicode en un chero, hay que especicarlo en la apertura


#!/usr/bin/python -tt # -*- coding: utf-8 -* import codecs fd=codecs.open("/tmp/test.txt",w,"utf-8") fd.write(u"texto en espa~ol\n") n fd.close

GSyC - 2010

Programacin en Python o

50

Programacin en Python o

Sentencias de control

If

#!/usr/bin/python -tt x = 3 if x : print verdadero else: print falso

Ntese como el carcter : introduce cada bloque de sentencias. o a

GSyC - 2010

Programacin en Python o

51

Programacin en Python o

Sentencias de control

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 - 2010

Programacin en Python o

52

Programacin en Python o

Sentencias de control

#!/usr/bin/python -tt 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 - 2010

Programacin en Python o

53

Programacin en Python o

Sentencias de control

While

>>> a=0 >>> while a<10: ... print a, ... a=a+1 ... 0 1 2 3 4 5 6 7 8 9

La coma el nal de un print evita que se imprima un salto de pgina a

GSyC - 2010

Programacin en Python o

54

Programacin en Python o

Sentencias de control

break sale de un bucle. (Aunque segn la programacin u o estructurada, break no deber usarse nunca. Emplalo solo si a e ests muy seguro de lo que haces) a
#!/usr/bin/python -tt a=10 while a > 0: print a, a=a-1

equivale a
#!/usr/bin/python -tt a=10 while 1: print a, if a==1: break a=a-1

Sentencia nula: pass Valor nulo: None


GSyC - 2010 Programacin en Python o 55

Programacin en Python o

Funciones

Funciones

#!/usr/bin/python -tt def a_centigrado(x): """Convierte grados farenheit en grados centgrados.""" return (x-32)*(5/9.0)

def a_farenheit(x): """Convierte grados centgrados en grados farenheit.""" return (x*1.8)+32

GSyC - 2010

Programacin en Python o

56

Programacin en Python o

Funciones

Los nombres de objeto declarados fuera de una funcin son o globales


#!/usr/bin/python -tt c=3 def f(x): return c+x print f(5) print c # 8 # 3

Los objetos declarados dentro de una funcin son locales o


#!/usr/bin/python -tt def f(x): c=3 return c+x print f(5) print c # ERROR: c es de mbito local a

GSyC - 2010

Programacin en Python o

57

Programacin en Python o

Funciones

Los objetos inmutables (enteros, cadenas, tuplas...) no se pueden modicar dentro de una funcin. (Porque se crea una o objeto distinto, local)
#!/usr/bin/python -tt c=3 def f(x): c=0 return c+x print f(5) print c # 5 # 3

GSyC - 2010

Programacin en Python o

58

Programacin en Python o

Funciones

#!/usr/bin/python -tt c=3 def f(x): c=c-1 #ERROR: la variable local an no est definida u a return c+x print f(5)

GSyC - 2010

Programacin en Python o

59

Programacin en Python o

Funciones

A menos que se use la sentencia global


#!/usr/bin/python -tt c=3 def f(x): global c #permite modificar un objeto global c=c-1 return c+x print f(5) print c #7 #2

GSyC - 2010

Programacin en Python o

60

Programacin en Python o

Funciones

Los objetos mutables (listas, diccionarios...) declarados dentro de una funcin tambin son locales o e
#!/usr/bin/python -tt l= ["uno","dos"] c=3 def f(): l=["cuatro"] c=5

# nuevo objeto, local # nuevo objeto, local

print print f() print print

l # c # l # c #

["uno","dos"] 3 ["uno","dos"] 3

GSyC - 2010

Programacin en Python o

61

Programacin en Python o

Funciones

Pero un objeto mutable s puede modicarse dentro de un funcin, o y el objeto global queda modicado
#!/usr/bin/python -tt l= ["uno","dos"] c=3 def f(): l.pop() # El objeto global c=c-5 # ERROR! print print f() print print l # c # l # c # ["uno","dos"] 3 ["uno"] 3 # El objeto global fue modificado

GSyC - 2010

Programacin en Python o

62

Programacin en Python o

Ficheros

Ficheros
open(nombre_fichero,modo) devuelve un objeto chero. modo:
w: Escritura. Destruye contenido anterior r: Lectura. Modo por defecto r+: Lectura y escritura a: Append

write(cadena) escribe la cadena en el chero. Solo escribe cadenas, para otros tipos, es necesario pasar a texto o usar librer pickle a read() devuelve una cadena con todo el contenido del chero readlines() devuelve una lista donde cada elemento es una l nea del chero close() cierra el chero

GSyC - 2010

Programacin en Python o

63

Programacin en Python o

Ficheros

lista=[sota,caballo,rey] fichero=open(prueba.txt,w) for x in lista: fichero.write(x+"\n") fichero.close() fichero=open(prueba.txt,r) mi_cadena=fichero.read() fichero.seek(0)

# vuelvo al princio del fichero # ahora cada elemnto incluye \n

lista_de_cadenas=fichero.readlines() fichero.seek(0) for linea in fichero.readlines(): print linea, fichero.close()

GSyC - 2010

Programacin en Python o

64

Programacin en Python o

Ficheros

Los mtodos read() y readlines() crean una copia completa del e chero en memoria. Para cheros muy grandes es ms eciente trabajar l a nea a l nea
fichero=open(prueba.txt,r) for linea in fichero: print linea, fichero.close()

No se deben mezclar estas dos maneras de acceder a un chero

GSyC - 2010

Programacin en Python o

65

Programacin en Python o

Cadenas de documentacin o

Cadenas de documentacin o
No son obligatorias pero s muy recomendables (varias herramientas hacen uso de ellas). La cadena de documentacin de un objeto es su atributo __doc__ o 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 propsito del o objeto. Debe empezar con mayscula y acabar con un punto u Una l nea en blanco debe separar la primera l nea del resto Las siguientes l neas deber empezar justo debajo de la an primera comilla doble de la primera l nea

GSyC - 2010

Programacin en Python o

66

Programacin en Python o

Cadenas de documentacin o

De una sola l nea:


def kos_root(): """Return the pathname of the KOS root directory.""" global _kos_root ...

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 - 2010

Programacin en Python o

67

Programacin en Python o

Cadenas de documentacin o

Documentando el cdigo (tipo Javadoc) o

Permite documentar el cdigo -generalmente las funciones- dentro o del propio cdigo o Genera la documentacin del cdigo en formatos legibles y o o navegables (HTML, PDF...) Se basa en un lenguaje de marcado simple PERO... hay que mantener la documentacin al d cuando se o a cambia el cdigo o

GSyC - 2010

Programacin en Python o

68

Programacin en Python o

Cadenas de documentacin o

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: nmero u La pendiente de la curva nmero u La interseccin con el eje Y o

@rtype: nmero u @return: la interseccoin con el eje X de la curva M{y=m*x+b} """ return -b/m

GSyC - 2010

Programacin en Python o

69

Programacin en Python o

Excepciones

Excepciones

Un programa sintcticamente correcto puede dar errores de a ejecucin o


#!/usr/bin/python -tt while 1: x=int(raw_input("Introduce un no ")) print x

GSyC - 2010

Programacin en Python o

70

Programacin en Python o

Excepciones

Denimos una accin para determinada excepcin o o


#!/usr/bin/python -tt while 1: try: x=int(raw_input("Introduce un no :")) print x except ValueError: print ("Nmero incorrecto") u

GSyC - 2010

Programacin en Python o

71

Programacin en Python o

Excepciones

Se puede indicar una accin para cualquier excepcin o o pero es muy desaconsejable (enmascara otros errores) El programador puede levantar excepciones
#!/usr/bin/python -tt try: x=int(raw_input("Introduce un no :")) print x except : # para cualquier excepcin o print ("Nmero incorrecto") u raise SystemExit # Excepcin para finalizar programa o print "Esta lnea nunca se ejecuta"

GSyC - 2010

Programacin en Python o

72

Librer as

Librer commands a

getstatusoutput

commands.getstatusoutput permite usar mandatos de la shell desde python Ejecuta una shell, pasndole su argumento como stdin a Devuelve una lista dos elementos
1 2

El valor status devuelto por el mandato Una concatenacin de stdout y stderr o

#!/usr/bin/python -tt import commands a=commands.getstatusoutput("ls /") print a[1]

GSyC - 2010

Programacin en Python o

73

Librer as

Librer commands a

La salida del mandato es una unica cadena. Para procesarla l nea a l nea, usamos split
#!/usr/bin/python -tt # -*- coding: utf-8 -*import commands,sys mandato="ps -ef" a=commands.getstatusoutput(mandato) if a[0] != 0: # si el mandato tiene xito, el status es 0 e sys.stderr.write("La orden "+mandato+" ha producido un error\n") raise SystemExit lineas=a[1].split("\n") # troceamos la salida lnea a lnea lineas.pop(0) # quitamos la primera lnea, la cabecera del ps for linea in lineas: campos_linea=linea.split() print "Usuario:"+ campos_linea[0], print "Proceso:"+ campos_linea[7]

GSyC - 2010

Programacin en Python o

74

Librer as

Librer sys a

Argumentos de linea de rdenes o sys.argv devuelve una lista con los argumentos pasados al script python desde la shell
koji@mazinger:~$ cat ejemplo.py #!/usr/bin/python -tt import sys print sys.argv[1:] koji@mazinger:~$ ./ejemplo.py un_argumento otro_argumento [un_argumento, otro_argumento]

GSyC - 2010

Programacin en Python o

75

Librer as

Librer sys a

Escribir en stderr
#!/usr/bin/python -tt import sys sys.stderr.write(Error: \n)

Leer desde stdin, escribir en stdout


#!/usr/bin/python -tt import sys for linea in sys.stdin.readlines(): sys.stdout.write(linea)

GSyC - 2010

Programacin en Python o

76

Librer as

Librer os, shutil as

os.path
Las funciones os.path.join() y os.path.split() unen y separan nombres de chero con directorios
Son compatibles con cualquier S.O. No importa si el path acaba en barra o no

os.path.exists() devuelve un boolean indicando si un chero existe


#!/usr/bin/python -tt import os ejemplo=os.path.join("/etc/apt","sources.list") print ejemplo # /etc/apt/sources.list print os.path.split(ejemplo) # (/etc/apt, sources.list) print os.path.exists(ejemplo) print os.path.exists("/usr/local/noexiste")

GSyC - 2010

Programacin en Python o

77

Librer as

Librer os, shutil as

Enlazar, borrar

#!/usr/bin/python -tt import os if not os.path.exists("/tmp/aa"): os.mkdir("/tmp/aa") os.chdir("/tmp/aa") # cd /tmp/aa os.link("/etc/hosts","hosts") # crea enlace duro os.symlink("/etc/hosts","enlace_hosts") # crea enlace blando os.remove("enlace_duro_hosts") # borra el fichero os.remove("enlace_hosts") # borra el fichero os.rmdir("/tmp/aa") # borra directorio (vacio)

GSyC - 2010

Programacin en Python o

78

Librer as

Librer os, shutil as

copiar, copiar y borrar recursivamente

#!/usr/bin/python -tt import shutil,os shutil.copytree("/home/koji/.gnome","/tmp/probando") # copia recursivamente. El destino no debe existir shutil.copy("/etc/hosts","/tmp/probando") # copia 1 fichero (como el cp de bash) shutil.move("/tmp/probando/hosts","/tmp/probando/mi_hosts") shutil.rmtree("/tmp/probando") # borra arbol lleno

GSyC - 2010

Programacin en Python o

79

Librer as

Librer os, shutil as

os.walk
Recorre recursivamente un directorio Por cada directorio devuelve una 3-tupla
Directorio Subdirectorios Ficheros
#!/usr/bin/python -tt import os directorio_inicial=os.getcwd() # current working directory os.chdir("/tmp/musica") # cd for x in os.walk("."): print x os.chdir(directorio_inicial)

GSyC - 2010

Programacin en Python o

80

Librer as

Librer os, shutil as

/tmp/musica |-- listado.txt |-- jazz -- pop |-- sabina | |-- pirata_cojo.mp3 | -- princesa.mp3 -- serrat |-- curro_el_palmo.mp3 -- penelope.mp3

(., [jazz, pop], [listado.txt]) (./jazz, [], []) (./pop, [serrat, sabina], []) (./pop/serrat, [], [curro_el_palmo.mp3, penelope.mp3]) (./pop/sabina, [], [princesa.mp3, pirata_cojo.mp3])

GSyC - 2010

Programacin en Python o

81

Librer as

Librer os, shutil as

Variables de entorno

#!/usr/bin/python -tt import os, sys mi_variable=os.getenv("MI_VARIABLE") if mi_variable==None: msg="ERROR: variable de entorno MI_VARIABLE no definida" sys.stderr.write(msg+\n) raise SystemExit

GSyC - 2010

Programacin en Python o

82

Librer as

Librer pickle: Persistencia as

Persistencia

Persistencia en Python: La librer Pickle a Serializa Objetos Permite: Transmitir objetos, almacenarlos en Disco SGBD o Compartir objetos Clases denidas por el usuario y sus instancias

GSyC - 2010

Programacin en Python o

83

Librer as

Librer pickle: Persistencia as

#!/usr/bin/python -tt import pickle cp={28:madrid,08:barcelona,33:asturias} fich=open(prueba.pick,w) pickle.dump(cp,fich) fich.close() fich=open(prueba.pick,r) codigos_postales=pickle.load(fich) fich.close() for x in codigos_postales.keys(): print x,codigos_postales[x]

GSyC - 2010

Programacin en Python o

84

También podría gustarte