21.07.2015 Views

Programando en Python

Programando en Python

Programando en Python

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

iding the snake


Ficha TécnicaParadigma: multiparadigma: ori<strong>en</strong>tado a objetos, imperativo,funcionalApareció <strong>en</strong>: 1991Diseñado por: Guido van RossumÚltima versión: 3.1 (27 de junio de 2009)Tipo de dato: fuertem<strong>en</strong>te tipado, dinámicoImplem<strong>en</strong>taciones: C<strong>Python</strong>, Jython, Iron<strong>Python</strong>, PyPyDialectos: Stackless <strong>Python</strong>, R<strong>Python</strong>Influido por: ABC, Tcl, Perl, Modula-3, Smalltalk, ALGOL 68, C,Haskell, Icon, Lisp, JavaHa influido: Ruby, Boo, Groovy, Cobra, DSistema operativo: MultiplataformaLic<strong>en</strong>cia de software: <strong>Python</strong> Software Foundation Lic<strong>en</strong>seWeb: http://www.python.org/


¿Por qué <strong>Python</strong>?Calidad de Software:El código de <strong>Python</strong> fué diseñado para ser legible, ypor <strong>en</strong>de reusable y manipulable. Aunque nunca haya visto niuna sola línea de código de <strong>Python</strong> <strong>en</strong> su vida, es muyprobable que pueda leer un código relativam<strong>en</strong>te s<strong>en</strong>cillo ypoder descifrar qué hace. Ti<strong>en</strong>e soporte para POO.Productividad <strong>en</strong> el desarrollo:Los programas <strong>en</strong> <strong>Python</strong> <strong>en</strong> g<strong>en</strong>eral son cortos ya querequier<strong>en</strong> m<strong>en</strong>os s<strong>en</strong>t<strong>en</strong>cias que los l<strong>en</strong>guajes más popularescomo C++ o Java. Los programas <strong>en</strong> <strong>Python</strong> corr<strong>en</strong>inmediatam<strong>en</strong>te, no necesitan ser compilados.Portabilidad del Programa:La mayoría de los programas pued<strong>en</strong> correr <strong>en</strong> variasplataformas sin necesidad de ser modificados. Paracualquier <strong>en</strong>torno se ofr<strong>en</strong>c<strong>en</strong> un set de librerías standardque permit<strong>en</strong> la manipulación de interfaces gráficas, basesde datos, sistemas basados <strong>en</strong> web y más...


¿Por qué <strong>Python</strong>?Librerías:<strong>Python</strong> trae una gran colección de librerías confuncionalidad portable conocida como la standard library.Ésta librería soporta un set importante de tareas deprogramación a nivel de aplicación, desde marching depatrones de texto hasta scripting de redes. Además <strong>Python</strong>puede ser ext<strong>en</strong>sible <strong>en</strong> el s<strong>en</strong>tido que pued<strong>en</strong> agregarseinnumerables colecciones de librerías externas, <strong>en</strong>treellas las NumPy y astroLib que veremos más adelante.Integración de Compon<strong>en</strong>tes:<strong>Python</strong> no es una herrami<strong>en</strong>ta “solitaria”, puedeinteractuar con librerías de C, C++.¡Divertido!:Debido a la facilidad del uso y a las herrami<strong>en</strong>tasprovistas “out of the box”, pued<strong>en</strong> hacer que programar <strong>en</strong><strong>Python</strong> sea divertido, ¡cualidad que impacta directam<strong>en</strong>te<strong>en</strong> la productividad!.


IntérpreteEjecución de ProgramasCódigo <strong>Python</strong>IntérpreteHardware[fernandoph@sh<strong>en</strong>xiu ~]$ python<strong>Python</strong> 2.5.2 (r252:60911, Jan 4 2009, 17:40:26)[GCC 4.3.2] on linux2Type "help", "copyright", "credits" or "lic<strong>en</strong>se" for more information.>>>


<strong>Programando</strong> <strong>en</strong> <strong>Python</strong>Programación Ori<strong>en</strong>tada a Objetos (POO)Clase: Es una descripción abstracta de las características que pose<strong>en</strong>los objetos que pert<strong>en</strong>ec<strong>en</strong> a ésa clase. En particular <strong>en</strong> una clasedescribimos qué m<strong>en</strong>sajes van a responder los objetos, como va a serla estructura interna, y el código de los métodos para responder ésosm<strong>en</strong>sajesUna clase es una FÁBRICA de objetosUn Objeto es un INSTANCIA de una claseInformation Hiding: NUNCA es importante cómo está construído unobjeto, sólo importa QUÉ HACE.Ésto permite modificaciones importantes <strong>en</strong> el objeto sin que loscli<strong>en</strong>tes se <strong>en</strong>ter<strong>en</strong> (si no cambió la interfaz).En el mom<strong>en</strong>to de desarrollo, es productivo p<strong>en</strong>sar <strong>en</strong> los objetosprimero como “qué hace” y luego “cómo lo hace”.


<strong>Programando</strong> <strong>en</strong> <strong>Python</strong>Programación Ori<strong>en</strong>tada a Objetos (POO)Polimorfismo: Se da cuando objetos de clases distintas pued<strong>en</strong>responder al mismo m<strong>en</strong>saje, aunque cada uno con su propiocomportami<strong>en</strong>to.Concreta: es posible crear objetos a partir de ésa claseClaseAbstracta: No se crean objetos a partir de ésta clase(concepto AKO). G<strong>en</strong>eralización


<strong>Programando</strong> <strong>en</strong> <strong>Python</strong>Programación Ori<strong>en</strong>tada a Objetos (POO)Her<strong>en</strong>cia: significa que se puede especificar que una clase sea una“especialización” o “descripción específica” de otra clase (llamadasuper-clase). Concepto AKO ó ES-UN.Super-ClaseVehículoA Kind Of (AKO)Es - UNClaseMoto Auto Avión Barco Bicicleta¡¡¡Reutilización de código!!!


<strong>Programando</strong> <strong>en</strong> <strong>Python</strong>Programación Ori<strong>en</strong>tada a Objetos (POO)¿Qué hereda un objeto?Her<strong>en</strong>cia de Comportami<strong>en</strong>toSi un objeto recibe un m<strong>en</strong>sajeque no <strong>en</strong>ti<strong>en</strong>de, buscar'a elmétodo para el m<strong>en</strong>saje <strong>en</strong> lasuper-clase que lecorresponde.Se id<strong>en</strong>tifican métodossimilares para definir clasesabstractas (m<strong>en</strong>saje común atodos los objetos quepert<strong>en</strong>ec<strong>en</strong> a la super-clase).EstructuraHer<strong>en</strong>ciaComportami<strong>en</strong>toHer<strong>en</strong>cia de Estructura“La forma de los objetos”. En elmom<strong>en</strong>to que “creo” el objeto(instancio), los datos quet<strong>en</strong>drá ése objeto serán losdatos del objeto más los datosde la super-clase.Binding Dinámico: Decimos que hay binding es dinámico cuando para cadaejecución de una expresión, el binding puede cambiar. Ésto ocurre por ejemplocuando una variable por ejemplo x repres<strong>en</strong>ta <strong>en</strong> un mom<strong>en</strong>to del programa aun auto pero <strong>en</strong> otro mom<strong>en</strong>to repres<strong>en</strong>ta a una bicicleta.


<strong>Programando</strong> <strong>en</strong> <strong>Python</strong>Programación Ori<strong>en</strong>tada a Objetos (POO)ClasesHer<strong>en</strong>ciaPOOPolimorfismoEncapsulami<strong>en</strong>to(DataHiding)


<strong>Programando</strong> <strong>en</strong> <strong>Python</strong>(Finalm<strong>en</strong>te)Lo más aburrido: Tipos de dato standardNúmeros: 1234, 3.1415, 999L, 3+4j, DecimalStrings: “spam”, “guido's”Listas: [1, [2, 'three'], 4]Diccionarios: {'food': 'spam', 'taste':'yum'}Tuplas: (1, 'spam', 4, 'U')Archivos: myfile = op<strong>en</strong>('eggs', 'r')Otros tipos: Conjuntos, tipos, Ninguno, booleanos


<strong>Programando</strong> <strong>en</strong> <strong>Python</strong>Tipos de dato Standard: Números>>> 123+222345>>> 1.5*46.0>>> 2**1001267650600228229401496703205376L>>> 7.6/3.42.2352941176470589>>> round(5.6)6.0>>> round(5.5)6.0>>> round(5.4)5.0>>> (6 + 3j)(6+3j)>>> (5 + 4j) + (1 - 5j)(6-1j)>>>>>> import math>>> math.pi3.1415926535897931Notar la L al final de la cad<strong>en</strong>anumérica: <strong>Python</strong>automáticam<strong>en</strong>te conviertecualquier <strong>en</strong>tero a un <strong>en</strong>tero“grande” cuando se necesitaprecisión extra.>>> import random>>> random.random()0.91441424722440634>>> random.choice([1,2,3,4])3


<strong>Programando</strong> <strong>en</strong> <strong>Python</strong>Tipos de dato Standard: StringsLos Strings son un tipo especial de “secu<strong>en</strong>cia”, las secu<strong>en</strong>cias <strong>en</strong> <strong>Python</strong> son coleccionesord<strong>en</strong>adas de otros objetos. Las secu<strong>en</strong>cias manti<strong>en</strong><strong>en</strong> el órd<strong>en</strong> izquierda-a-derecha <strong>en</strong>trelos ítems que conti<strong>en</strong>e. Estrictam<strong>en</strong>te hablando, los strings son secu<strong>en</strong>cias de strings deUN caracter.>>> cad<strong>en</strong>a[10:18]>>> cad<strong>en</strong>a = "una cad<strong>en</strong>a relativam<strong>en</strong>te larga"' relativ'>>> cad<strong>en</strong>a>>> cad<strong>en</strong>a[15:]'una cad<strong>en</strong>a relativam<strong>en</strong>te larga''tivam<strong>en</strong>te larga'>>> print cad<strong>en</strong>a>>> cad<strong>en</strong>a + ' que ahora es mas larga'una cad<strong>en</strong>a relativam<strong>en</strong>te larga'una cad<strong>en</strong>a relativam<strong>en</strong>te larga que ahora es>>> l<strong>en</strong>(cad<strong>en</strong>a)mas larga'30>>> cad<strong>en</strong>a * 10>>> cad<strong>en</strong>a.islower()'una cad<strong>en</strong>a relativam<strong>en</strong>te largauna cad<strong>en</strong>aTruerelativam<strong>en</strong>te largauna cad<strong>en</strong>a relativam<strong>en</strong>te>>> cad<strong>en</strong>a.isupper()largauna cad<strong>en</strong>a relativam<strong>en</strong>te largaunaFalsecad<strong>en</strong>a relativam<strong>en</strong>te largauna cad<strong>en</strong>a>>> cad<strong>en</strong>a.upper()relativam<strong>en</strong>te largauna cad<strong>en</strong>a relativam<strong>en</strong>te'UNA CADENA RELATIVAMENTE LARGA'largauna cad<strong>en</strong>a relativam<strong>en</strong>te largauna>>> cad<strong>en</strong>a.isupper()cad<strong>en</strong>a relativam<strong>en</strong>te largauna cad<strong>en</strong>aFalseInmutabilidadrelativam<strong>en</strong>te larga'>>> cad<strong>en</strong>a[0]'u'>>> >>> cad<strong>en</strong>a[-4]'a'Notar que el signo mas (+) repres<strong>en</strong>ta difer<strong>en</strong>tesoperaciones de acuerdo a los objetos con los que seopera, si los operadores son números <strong>en</strong>tonces lossumará; si los operadores son cad<strong>en</strong>as <strong>en</strong>tonces losconcat<strong>en</strong>ará. Un claro ejemplo de Polimorfismo


<strong>Programando</strong> <strong>en</strong> <strong>Python</strong>Tipos de dato Standard: StringsMétodos específicos del tipoAlgunas de las operaciones de strings vistas anteriorm<strong>en</strong>te son <strong>en</strong> realidad operaciones decualquier tipo que pert<strong>en</strong>ezca a la super-clase secu<strong>en</strong>cia, como por ejemplo las listas y lastuplas, los strings ti<strong>en</strong><strong>en</strong> operaciones propias (métodos), veamos algunos:>>> cad<strong>en</strong>a.find('tiva')15>>> cad<strong>en</strong>a[15]'t'>>> cad<strong>en</strong>a.replace('larga', 'corta')'una cad<strong>en</strong>a relativam<strong>en</strong>te corta'>>> cad<strong>en</strong>a.split(' ')['una', 'cad<strong>en</strong>a', 'relativam<strong>en</strong>te', 'larga']Listado de operaciones “online”>>> dir(cad<strong>en</strong>a)['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__ge__', '__getattribute__', '__getitem__','__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__l<strong>en</strong>__', '__lt__', '__mod__', '__mul__','__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__str__', 'capitalize','c<strong>en</strong>ter', 'count', 'decode', '<strong>en</strong>code', '<strong>en</strong>dswith', 'expandtabs', 'find', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace','istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split','splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']>>> help(cad<strong>en</strong>a.upper)Help on built-in function upper:Ayuda “online”upper(...)S.upper() -> stringReturn a copy of the string S converted to uppercase.(END)


<strong>Programando</strong> <strong>en</strong> <strong>Python</strong>Tipos de dato Standard: Listas>>> lista = [4502, "IAR", 3.1415, [1, "fer", "python"], 'i']Polimorfismo>>> l<strong>en</strong>(lista)5>>> lista[3][1, 'fer', 'python']>>> l<strong>en</strong>(lista[3][2])6Métodos específicos del tipo>>> lista.app<strong>en</strong>d('unlp')>>> lista[4502, 'IAR', 3.1415000000000002, [1, 'fer', 'python'],'i', 'unlp']>>> lista.pop(2)3.1415000000000002>>> lista[4502, 'IAR', [1, 'fer', 'python'], 'i', 'unlp']>>> lista.sort()>>> lista[4502, [1, 'fer', 'python'], 'IAR', 'i', 'unlp']>>> lista.reverse()>>> lista['unlp', 'i', 'IAR', [1, 'fer', 'python'], 4502]>>> matriz=[]>>> matriz.app<strong>en</strong>d([])>>> matriz[[]]>>> matriz=[[1, 2, 3],... [4, 5, 6],... [7, 8, 9]]>>> matriz[[1, 2, 3], [4, 5, 6], [7, 8, 9]]>>> matriz[0][1, 2, 3]>>> matriz[0][2]3Lista VacíaÉste tipo de matrices funcionanperfectam<strong>en</strong>te para operaciones <strong>en</strong>pequeñas escalas. Para realizar tareasnuméricas de mayor embergaduraexiste la librería NumPy.


<strong>Programando</strong> <strong>en</strong> <strong>Python</strong>Resumi<strong>en</strong>do:El objeto lista es una colección ord<strong>en</strong>ada de otros objetos arbitrarios que puedecrecer indefinidam<strong>en</strong>te (si nos alcanza la RAM).Las listas PUEDEN modificarse, contrariam<strong>en</strong>te a lo que pasaba con los strings.Un ejemplo de Binding dinámico con Listas>>> lista = [4502, "IAR", 3.1415, [1, "fer", "python"], 'i']>>> for item in lista:... print item...4502IAR3.1415[1, 'fer', 'python']iel id<strong>en</strong>tificador de objeto'item' hará bindingdinámico con cada uno delos items de la lista deacuerdo como avanza elíndice, repres<strong>en</strong>tando a unobjeto distinto cada vez.Más sobre estructuras de control, <strong>en</strong> unos minutos...


<strong>Programando</strong> <strong>en</strong> <strong>Python</strong>Tipos de dato Standard: DiccionariosLos diccionarios <strong>en</strong> <strong>Python</strong> son sub-clases de la clase Mapeos.La clase Mapeos no es ordinal, <strong>en</strong> cambio su mecánica es asociar palabras clave a valores.Los diccionarios son la única clase standard <strong>en</strong> <strong>Python</strong> cuya super-clase es un Mapeo.Pued<strong>en</strong> modificarse <strong>en</strong> tiempo de ejecución, permiti<strong>en</strong>do aum<strong>en</strong>tar o disminuir su tamaño deacuerdo a la demanda del usuario, como las listas.>>> D = {'cantidad' : 5, 'vehiculo' : 'auto', 'opciones' : [1, 2, 3]}>>> D{'opciones': [1, 2, 3], 'vehiculo': 'auto', 'cantidad': 5}>>> D['opciones'][1, 2, 3]>>> D['opciones'][2]3>>> D.items()[('opciones', [1, 2, 3]), ('vehiculo', 'auto'), ('cantidad', 5)]>>> D['peras']='2kg'>>> D{'peras': '2kg', 'opciones': [1, 2, 3], 'vehiculo': 'auto', 'cantidad': 5}>>> 'peras' in DTrue


<strong>Programando</strong> <strong>en</strong> <strong>Python</strong>Tipos de dato Standard: TuplasUna tupla es una lista que no puede ser cambiada. Es una secu<strong>en</strong>cia (como laslistas) pero son inmutables (como los strings). Entonces, ¿para qué queremosun tipo de dato que es parecida a una lista pero que no podemos modificar?.Justam<strong>en</strong>te la inmutabilidad de las tuplas hac<strong>en</strong> a su practicidad, las tuplasmanti<strong>en</strong><strong>en</strong> su integridad a lo largo de un programa, nadie puede modificarlas.>>> t = (0, 'Banana', 10, 20, 123)>>> t(0, 'Banana', 10, 20, 123)>>> l<strong>en</strong>(t)5>>> t[1]'Banana'>>> t[1] = 'Peras'Traceback (most rec<strong>en</strong>t call last):File "", line 1, in TypeError: 'tuple' object does not support item assignm<strong>en</strong>t>>>


<strong>Programando</strong> <strong>en</strong> <strong>Python</strong>Tipos de dato Standard: ConjuntosLos objetos “conjunto” son un modelado de los conjuntos que todos conocemos <strong>en</strong> matemática. En<strong>Python</strong> los conjuntos se crean llamando a la función set.>>> frutas = set(['bananas', 'manzanas', 'frutillas', 'tomates'])>>> frutasset(['tomates', 'frutillas', 'bananas', 'manzanas'])>>> verduras = set(['zapallos', 'cebollas', 'papas', 'tomates'])>>> verdurasset(['tomates', 'cebollas', 'zapallos', 'papas'])>>> frutas & verdurasset(['tomates'])>>> frutas | verdurasset(['bananas', 'frutillas', 'zapallos', 'papas', 'tomates', 'cebollas','manzanas'])>>> frutas - verdurasset(['frutillas', 'bananas', 'manzanas'])>>> frutas.symmetric_differ<strong>en</strong>ce(verduras)set(['bananas', 'frutillas', 'zapallos', 'papas', 'cebollas', 'manzanas'])


<strong>Programando</strong> <strong>en</strong> <strong>Python</strong>Tipos de dato Standard: ArchivosLos Archivos son un tipo especial de objeto, no hay un “constructor” de los objetosarchivo. Para crear un objeto de la clase archivo se llama a la función “op<strong>en</strong>” pasándolecomo parámetro el nombre del archivo y el modo.>>> archivo = op<strong>en</strong>('archivo.txt', 'w')>>> dir(archivo)['__class__', '__delattr__', '__doc__', '__<strong>en</strong>ter__', '__exit__', '__getattribute__','__hash__', '__init__', '__iter__', '__new__', '__reduce__', '__reduce_ex__','__repr__', '__setattr__', '__str__', 'close', 'closed', '<strong>en</strong>coding', 'fil<strong>en</strong>o', 'flush','isatty', 'mode', 'name', 'newlines', 'next', 'read', 'readinto', 'readline','readlines', 'seek', 'softspace', 'tell', 'truncate', 'write', 'writelines','xreadlines']>>> archivo.write('Hola Mundo\n')>>> archivo.close()>>> otro_archivo = op<strong>en</strong>('archivo.txt', 'r')>>> otro_archivo.read()'Hola Mundo\n'>>> otro_archivo.seek(0)>>> bytes = otro_archivo.read()>>> bytes'Hola Mundo\n'>>> bytes.split()['Hola', 'Mundo']


<strong>Programando</strong> <strong>en</strong> <strong>Python</strong>Estructuras de Control de Flujo de programa(seguimos aburridos)S<strong>en</strong>t<strong>en</strong>cia Rol EjemploAsignaciónLlamadasImprimirif/elif/elsefor/elsewhile/elsepassbreak,continuetry/except/finallyraiseImport,fromdef,return,yieldCrea refer<strong>en</strong>ciasCorre FuncionesImprime ObjetosAcciones de selecciónIteración de secu<strong>en</strong>ciasIteraciones g<strong>en</strong>eralesMarcador de posición vacíoSaltos <strong>en</strong> iteracionesCapturadores de ExcepcionesDisparadores de ExcepcionesAcceso a MódulosConstructores de funcionesa, b, c = 'puedo', 'asignar', 'varios'string.find('buscame esto')print ('Que aburrido')If “guarda” in texto:print textofor elem<strong>en</strong>to in lista:print elem<strong>en</strong>towhile x < yprint 'x es m<strong>en</strong>or a y'while True:passwhile True:If not line: breaktry:accion()except:Print 'Error <strong>en</strong> accion'raise, <strong>en</strong>dSearch, locationimport sysfrom sys import stdindef f (a, b, c = 1, *d):return a+b+c+d[0]def g<strong>en</strong>(n):for i in n, yield i*2


<strong>Programando</strong> <strong>en</strong> <strong>Python</strong>Qué sale y que <strong>en</strong>tra <strong>en</strong> el mundo <strong>Python</strong> respecto de otros l<strong>en</strong>guajes.Una pequeñisima introducción a lo que vamos a ver <strong>en</strong> unos segundos.¿Qué Entra?- El carácter “:” (dos puntos)¿Qué Sale?- Los paréntesis son opcionales.- El fin de la línea es el fin de la s<strong>en</strong>t<strong>en</strong>cia (no hay carácter ';' como <strong>en</strong> C).- El fin de la ind<strong>en</strong>tación es el fin de un bloque de s<strong>en</strong>t<strong>en</strong>cias.


<strong>Programando</strong> <strong>en</strong> <strong>Python</strong>Estructuras de Control de Flujo de programa(seguimos aburridos)- if / elif / else:if a > b:print “el mayor es %d\n” % aelif a < b:print “el mayor es %d\n” % belse:print “Son iguales”- while:while condición:s<strong>en</strong>t<strong>en</strong>ciasAelse:s<strong>en</strong>t<strong>en</strong>ciasBSe ejecutan las s<strong>en</strong>t<strong>en</strong>ciasA mi<strong>en</strong>tras la condición sea verdadera, las s<strong>en</strong>t<strong>en</strong>ciasB seejecutarán sólo si la condición se hace falsa y no se dió un caso de break d<strong>en</strong>tro des<strong>en</strong>t<strong>en</strong>ciasA.


<strong>Programando</strong> <strong>en</strong> <strong>Python</strong>Estructuras de Control de Flujo de programa- break“Sale” del loop más cercano “se salta” la fase de chequeo de condición.- continue“Salta” directam<strong>en</strong>te a la fase de chequeo del bucle.- passNo hace nada, es una s<strong>en</strong>t<strong>en</strong>cia vacía.- for / elseEs un iterador de secu<strong>en</strong>cias, puede moverse a través de todos los ítems de cualquierobjeto secu<strong>en</strong>ciable ord<strong>en</strong>ado, funciona con strings, listas, tuplas y todos los objetossecu<strong>en</strong>ciables.for in else:El bloque “else” funciona de igual manera que <strong>en</strong> el loop while: se ejecutarán las s<strong>en</strong>t<strong>en</strong>ciasBsiempre que el loop for haya terminado satisfactoriam<strong>en</strong>te, ésto es: que el objetos<strong>en</strong>cu<strong>en</strong>ciable sea completam<strong>en</strong>te iterado y no se haya dado una condición de “break”


<strong>Programando</strong> <strong>en</strong> <strong>Python</strong>Estructuras de Control de Flujo de programaFuncionesdef es código ejecutable. Las funciones <strong>en</strong> <strong>Python</strong> se escrib<strong>en</strong> con ésta s<strong>en</strong>t<strong>en</strong>cia. Adifer<strong>en</strong>cia de otros l<strong>en</strong>guajes compilados, una función es código ejecutable <strong>en</strong> <strong>Python</strong>, éstoquiere decir que la función no existe hasta que se alcanza el punto donde se define lafunción, ésto permite por ejemplo anidar funciones d<strong>en</strong>tro de bloques if-else, loops. El usocomún de def es crear un módulo donde se defin<strong>en</strong> funciones y luego importarlo.def crea un objeto de clase función y se lo asigna al nombre de la función. Como <strong>en</strong> todaslas asignaciones el nombre de la función se convierte <strong>en</strong> una refer<strong>en</strong>cia al objeto funcióninstanciado.return <strong>en</strong>via un objeto “de respuesta” a qui<strong>en</strong> haya llamado a la función. Cuando se llama auna función, el módulo que invoca deti<strong>en</strong>e su trabajo hasta que la función haya terminadode realizar las tareas especificadas, luego devuelve el control al modulo que llamó. El valorde retorno se convierte <strong>en</strong> el resultado del llamado a la función.Los Argum<strong>en</strong>tos se pasan por asignación (refer<strong>en</strong>cia a objeto), ésto quiere decir que losargum<strong>en</strong>tos de función hac<strong>en</strong> refer<strong>en</strong>cia a cierto objeto para ser pasados como argum<strong>en</strong>to.Las variables son locales a la función y exist<strong>en</strong> sólo cuando la función está corri<strong>en</strong>do.


<strong>Programando</strong> <strong>en</strong> <strong>Python</strong>Estructuras de Control de Flujo de programaMódulos (import – from – reload)Los módulos usualm<strong>en</strong>te correspond<strong>en</strong> a archivos <strong>en</strong> <strong>Python</strong> que sirv<strong>en</strong> al propósito de reutilización de códigoy datos. Los módulos pued<strong>en</strong> ser también “ext<strong>en</strong>siones” que son módulos codificados <strong>en</strong> otros l<strong>en</strong>guajes (C,C++, C#, Java, etc). Cada archivo es un módulo y los módulos importan otros módulos para usar los nombresque éstos defin<strong>en</strong>, los módulos se invocan con dos s<strong>en</strong>t<strong>en</strong>cias:importhace que un cli<strong>en</strong>te (importador) obt<strong>en</strong>ga todo un módulofrompermite a los cli<strong>en</strong>tes obt<strong>en</strong>er nombres particulares de un módulo (funciones, objetos, etc).Existe también la función reload que no veremos hoy.Arquitectura de los programas <strong>en</strong> <strong>Python</strong>G<strong>en</strong>eralm<strong>en</strong>te un programa <strong>Python</strong> consiste <strong>en</strong> múltiples archivos que conti<strong>en</strong><strong>en</strong> s<strong>en</strong>t<strong>en</strong>cias <strong>Python</strong>. Elprograma se estructura como un solo main (archivo) que ti<strong>en</strong>e ninguno, uno o más archivos suplem<strong>en</strong>tariosllamados módulos.Los módulos g<strong>en</strong>eralm<strong>en</strong>te no “hac<strong>en</strong>” nada cuando corr<strong>en</strong>, <strong>en</strong> cambio defin<strong>en</strong> las herrami<strong>en</strong>tas que van ausar los programas que los invocan. En última instancia, lo que hacemos es importar módulos y acceder a susatributos para usar sus herrami<strong>en</strong>tas.


<strong>Programando</strong> <strong>en</strong> <strong>Python</strong>Estructuras de Control de Flujo de programaMódulos (import – from – reload) continuaciónPara aclarar un poco lo que estamos dici<strong>en</strong>do, vamos a suponer la sigui<strong>en</strong>te estructura de un programa<strong>Python</strong> con múltiples archivos fu<strong>en</strong>te.Top Levela.pyMódulosb.pyc.pyMódulosde lalibreríaestándardb.py:def sum (a, b):return a + bc.py:def prod (a, b):return a * ba.py:import bimport ca, b = 2, 3print b.sum(a, b)print c.prod(a,b)a.py:from b import *from c import *a, b = 2, 3print sum(a, b)print prod(a,b)


<strong>Programando</strong> <strong>en</strong> <strong>Python</strong>Algunos ejemplos de estructuras de controlfor / else:>>> utiles = ['lapiz', 'lapicera', 'goma', 'sacapuntas']>>> for util in utiles:... print 'comprar ' + util...comprar lapizcomprar lapiceracomprar gomacomprar sacapuntas>>> for i in range (0, 5):... print i**2...014916>>>while / else:>>> lista = []>>> n = 0>>> while l<strong>en</strong>(lista) 10:... lista.app<strong>en</strong>d(n)... n = n + 1...>>> lista[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> n10


<strong>Programando</strong> <strong>en</strong> <strong>Python</strong>Algunos ejemplos de estructuras de controlFunciones:>>> def alaquinta(n):... return n ** 5...>>> alaquinta>>> alaquinta(8)32768>>> f = alaquinta>>> f(8)32768>>> f>>>Funciones:>>> def factorial(x):... if x == 0:... return 1... else:... return x * factorial (x - 1)...>>> factorial(10)3628800


Refer<strong>en</strong>cias y LinksLibro “Learning <strong>Python</strong>”By Mark LutzEditorial O'ReillyISBN-10: 0-596-51398-4ISBN-14: 978-0-596-51398-6http://www.iar.unlp.edu.ar/~fernandoph/pub/OReilly.Learning.<strong>Python</strong>.3rd.Edition.Oct.2007.pdf(SHHHHHH)Tutorial de <strong>Python</strong> de Guido van Rossum traducido al español por la comunidad PyArhttp://trac.usla.org.ar/proyectos/python-tutorial<strong>Python</strong> con baterías extra:http://www.iar.unlp.edu.ar/~fernandoph/pub/<strong>Python</strong>+PySerial+GTK_WIN32/NumPyhttp://numpy.scipy.org/Astrolibhttp://www.scipy.org/AstroLib


Dudas, com<strong>en</strong>tarios, suger<strong>en</strong>cias


ColeccionesSecu<strong>en</strong>ciasMapeosDiccionariosInmutablesMutablesStringsListasUnicodeTuplas

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!