Introducción A Python Presentacion
Introducción A Python Presentacion
Francisco Barranco Expsito Antonio Guerrero Galindo Manuel Entrena Casas Alvaro Gonzlez Nonay
Qu es Python?
Python es un lenguaje de programacin interpretado, interactivo y orientado a objetos. Incorpora mdulos, excepciones, tipado dinmico, tipos de datos dinmicos de muy alto nivel, y clases. Python combina potencia con una sintaxis muy clara. Tiene interfaces a muchas llamadas al sistema y bibliotecas, as como tambin a varios sistemas de ventanas, y es extensible en C o C++. Tambin es utilizable como un lenguaje de extensin para aplicaciones que necesiten interfaces programables. Finalmente, Python es portable, corre en muchas variantes de Unix, en la Mac, y en PCs bajo MS D S, Windows, Windows - O NT, y OS/2.
Historia
Fue creado a principios de los 90 por Guido Van Rossum en el Stichting Mathematisch Centrum (Instituto Nacional de Investigacin de Matemticas y Ciencias de la Computacin en Holanda ), como sucesor de un lenguaje llamado ABC. En 1995, Guido continu su trabajo en la Corporation for National Research Initiatives (Corporacin Nacional de Iniciativas de Investigacin), en Virginia, EE.UU; donde lanz varias versiones del software. En Mayo de 2000, Guido y el grupo de desarrolladores del nucleo de Python se trasladaron a los laboratorios de BeOpen.com. En Octubre del mismo ao se mudaron a Digital Creations, actualmente Zope Corporation. En 2001 se fund la Python Software Foundation (PSF), organizacin sin nimo de lucro, para poseer la propiedad intelectual sobre Python.
Caractersticas
Posee una sintaxis sencilla: rpido aprendizaje. Tratamiento de excepciones con nombre. Extensible a otros sistemas software. Flexible en el tratamiento del lenguaje:un mdulo que interactuar con un sistema externo puede ser probado con una imitacin del sistema escrito en Python. Es un lenguaje dinmicamente interpretado. Es orientado a objetos: Herencia mltiple. Ligadura dinamica. Polimorfismo. Su ncleo es tambin orientado a objetos: jerarqua de clases. Portable: est implementado en C estndar usando E/S Posix. Gratuito, y de libre distribucin.
Desventajas
Python no pretende se perfecto para todos los propsitos. Podemos suponer que la mayora de los programas escritos hoy en da podran pasarse a Python, pero l slo no sera suficiente para la cantidad de aplicaciones que estn orientadas a componentes compilados. Por ejemplo, no est indicado para las siguientes aplicaciones: Algoritmos de compresin de datos: Estos algoritmos traducen un flujo de datos a una forma ms pequea. Esto implica examinar cada byte, y hacer un tratamiento estadstico. Para grandes cantidades de datos los compresores escritos en Python resultan demasiado lentos. Controladores de dispositivos: Al igual que antes, una aplicacin que realice millones de operaciones en punto flotante no uniformes ser demasiado lenta en Python. Operaciones crticas de bases de datos. Operaciones altamente especializadas.
Sintaxis Python
Comentarios : detrs de # Asignacin : se usa = Ej: >>> a=3+2J >>> # Esto es un comentario >>>B=7 #asignacin
Sintaxis Python
Definicin de funciones: >>>def nombrefuncin(arg1,arg2..): ... instruccin1 ... instruccin2 ... ................... ... instruccinN ... La indentacin delimita qu instrucciones pertenecen a la funcin. A no ser que se use return, la funcin devuelve None.
Sintaxis Python
If: >>>if condicion: ... instrucciones ... elif condicion: ... instrucciones ... else: ... instrucciones ...
Sintaxis Python
For: >>>for variable in variable_lista: ... instrucciones ... Range: usado de la forma range(i) genera la lista [0,1,...,i]. usado de la forma range(i,j) genera la lista [i,i+1,...,j-1]
Sintaxis Python
filter(funcin, lista_arg) devuelve una lista con los elementos x de lista_arg que cumplen f(x) = true. >>>def f(x): return x%2 != 0 and x%3 != 0 ... >>>filter(f, range(2,25)) [5,7,11,13,17,19,23]
Sintaxis Python
map(funcin, lista_arg) devuelve la lista: [f(lista_arg[0]),f(lista_arg[1]),...,f(lista_arg[n])] >>>def cubo(x): return x*x*x ... >>> map(cubo, range(1,5)) [1,8,27,64]
Sintaxis Python
reduce(funcion, lista_arg) llama a funcion con los dos primeros elementos de lista_arg, luego la llama con el tercero y el resultado anterior, etc. Si slo hay un elemento se devuelve este, y si no hay ninguno da error.
Sintaxis Python
>>>def add(x,y): return x+y ... >>>reduce(add, range(1,11)) 55
Sintaxis Python
List Comprehensions: operaciones muy intuitivas con listas >>>vec = [2,4,6] >>>[3 * x for x in vec] [6,12,18] >>>[3 * x for x in vec if x > 3] [12,18] >>>[[x,x**2] for x in vec] [[2,4],[4,16],[6,36]]
Sintaxis Python
Definicin y uso de Clases: >>>class NombreDeClase: ... sentencia 1 ... ................ ... sentencia N ... >>>variable = NombreDeClase ()
Sintaxis Python
... ... ... ... ... >>>class MiClase: Una clase de ejemplo i = 12435 def f(self): return hola mundo
Sintaxis Python
Se puede incluir una funcin, llamada init, que se ejecute siempre que se cree una instancia de la clase. Def __init__(self): instrucciones init no puede hacer return.
Sintaxis Python
Las variables de instancia no necesitan declararse. >>>x=MiClase() >>>x.numero=7 x.f() equivale a MiClase.f(x) >>>MiClase.f(x) hola mundo
Sintaxis Python
Para definir una subclase se escribe: class NombreDeClase(NombreSubclase) Se heredan funciones y variables de clase.
Sintaxis Python
>>>class MiSubClase(MiClase): ... j=5 ... def g(self): ... return 5 ... >>>x=MiSubClase() >>>x.j 5 >>>x.i 12435 >>>x.f() hola mundo
Sintaxis Python
Podemos redefinir una funcin en la subclase: >>> class MiSubClase(MiClase): ... def f(self): ... return HOLA MUNDO ... >>> x = MiSubClase() >>> x.f() HOLA MUNDO
Sintaxis Python
Y para llamar al mtodo de la superclase : >>>x.f() hola mundo >>>MiClase.f(x) hola mundo
Sintaxis Python
Es muy fcil dotar de herencia mltiple, basta con incluir ms clases como argumentos en la definicin: >>>class MiSubClase(Superclase1, Superclase2,...) A la hora de resolver un mensaje a un objeto de MiSubClase se buscar el mtodo en la propia clase, si no se encuentra se busca en Superclase1 (y en sus superclases), luego en Superclase2, etc.
Los operadores con tipos mixtos convierten el operando entero a coma flotante:
>>> 4 * 2.5 / 3.3 3.0303030303 >>> 7.0 / 2 3.5
Para extraer una de las partes de un nmero complejo z, usa z.real y z.imag.
>>> a=1.5+0.5j >>> a.real
1.5
>>> a.imag
0.5
con saltos de linea. >>> print hola Esto es un texto bastante largo con saltos de linea.
Esto requiere que el numero de variables sea igual al numero de elementos de la tupla. Las tuplas, como las cadenas, son inmutables, aunque se puede simular el mismo efecto mediante corte y concatenacion. Otra opcin es que la tupla contenga elementos mutables(como listas)
Ejemplo Correo
import smtplib import sys,os def enviar_mensajes_a_lista_de_correo(mail_enviador,asunto,servidorsmtp,puertosmtp): fichero_con_lista_direcciones=raw_input('Introducir path completo del fichero de direcciones: ') fichero_con_cuerpo_mensaje=raw_input('Introducir path completo del fichero con el cuerpo del mensaje: ') fichero_con_mensajes_enviados=raw_input('Introducir path completo para el fichero de mensajes enviados: ') fld=open(fichero_con_lista_direcciones,'r') fme=open(fichero_con_mensajes_enviados,'w')
Ejemplo Correo
for i in fld.readlines(): try: mensaje = "From: "+mail_enviador+"\nSubject: "+asunto+"\nTo: "+i+"\n" fcm=open(fichero_con_cuerpo_mensaje,'r') print '\nMensaje para: '+i for ii in fcm.readlines(): mensaje=mensaje+ii fcm.close() print 'Abierto fichero del cuerpo del mensaje...\n' server = smtplib.SMTP(servidorsmtp,int(puertosmtp)) server.sendmail(mail_enviador, i, mensaje) fme.write('Mensaje enviado a:'+i) server.quit()
Ejemplo Correo
except: print 'Error enviando el fichero a: '+ i fme.write('Error enviado el fichero a: '+i) fld.close() fme.close()
Ejemplo Correo
if __name__ == '__main__' : print '''Uso: Este programa envia un mensaje a una lista de direcciones de e-mail. El fichero de direcciones debe de tener una direccion de e-mail por linea. El fichero con el cuerpo del mensaje debe de estar en formato texto. El puerto de SMTP estandard es el 25. ''' enviador_mensaje=raw_input('Introducir e-mail del enviador: ') asunto_mensaje=raw_input('Introducir asunto del mensaje: ') servidorsmtp_mensaje=raw_input('Introducir servidor de SMTP: ') puertosmtp_mensaje=raw_input('Introducir puerto del SMTP : ') enviar_mensajes_a_lista_de_correo(enviador_mensaje,asunto_mensaje,servid orsmtp_mensaje,puertosmtp_mensaje) sys.exit()
ALGUNAS DIRECTIVAS
En Python existen una serie de directivas distribuidas en mdulos (decisin de diseo) como son: 1. type: Devuelve el tipo de dato de cualquier objeto. >>type (1) >>type([a, b]) <type int> <type list> 2. str: Transforma un dato en una cadena: >>str(1) >>str([a,b]) 1 [ a, b] 3. dir: Devuelve una lista de los atributos y mtodos de cualquier objeto: mdulos, funciones, cadenas, listas ... >>dir ([a,b]) >>['index', 'insert', 'pop', 'remove', 'reverse', 'sort']
LGICA EN PYTHON
En Python, and y or realizan las operaciones de lgica booleana como cabe esperar, pero no devuelven valores booleanos; devuelven uno de los valores reales que estn comparando.
>>> 'a' and 'b' 'b >>> '' and 'b' ' >>> 'a' and 'b' and 'c' 'c' >>> 'a' or 'b' 'a' >>> '' or 'b' 'b' >>> '' or [] or {} {}
La expresin bool ? a : b, que se evala como a si bool es verdadero, y b en caso contrario, se puede realizar en Python.
>>> a = " >>> b = "second" >>> (1 and [a] or [b])[0]
FUNCIONES LAMBDA
Tomadas de Lisp, definen funciones mnimas, de una lnea, sobre la marcha que pueden usarse donde usemos una funcin. >>> def f(x): >>> g = lambda x: x*2 (1) ... return x*2 >>> g(3) ... 6 Las funciones lambda, no pueden contener ms de una expresin, ni tampoco rdenes, no se debe exprimir mucho la funcionalidad de este mecanismo, si se necesita algo ms complejo, se deben definir funciones normales. Las funciones lambda son una cuestin de estilo. Siempre se podr definir una funcin normal, separada y utilizarla en su lugar.
CADENAS DE DOCUMENTACIN
La primera lnea debe ser un resumen corto y conciso de lo que debe hacer el mtodo. No se hace constar el nombre y tipo del objeto, pues stos estn disponibles mediante otros modos. Esta lnea debe empezar por mayscula y terminar en punto.
>>> def mifuncion(): """No hace nada, es un ejemplo de comentario COMENTARIO """
Si hay ms lneas, la segunda debe ir en blanco, separando visualmente el resumen del resto de la descripcin. Las siguientes deben ser prrafos que describan las convenciones de llamada de los objetos, sus efectos secundarios, etc.
ERRORES Y EXCEPCIONES I
Hay (al menos) dos tipos de errores diferenciables: los errores de sintaxis y las excepciones. Los errores de sintaxis son los ms comunes en el intrprete:
>>> while 1 print Hola mundo File "<stdin>", line 1 while 1 print Hola mundo ^ SyntaxError: invalid syntax
Se muestran el nombre del fichero y el nmero de lnea para saber dnde buscar, si la entrada vena de un fichero. Los errores que se detectan en la ejecucin se llaman
excepciones.
ERRORES Y EXCEPCIONES II
>>> 10 * (1/0) Traceback (innermost last): File "<stdin>", line 1 ZeroDivisionError: integer division or modulo >>> 4 + variable*3 Traceback (innermost last): File "<stdin>", line 1 NameError: variable >>> 2 + 2 Traceback (innermost last): File "<stdin>", line 1 TypeError: illegal argument type for built-in operation
ERRORES Y EXCEPCIONES IV
Una sentencia try puede contener ms de una clusula except, para capturar diferentes excepciones (no se ejecuta ms de un gestor para una excepcin) y puede capturar ms de una excepcin, nombrndolas dentro de una lista: ... except (RuntimeError, TypeError, NameError): La ltima clusula except puede no nombrar ninguna excepcin, en cuyo caso hace de comodn y captura cualquier excepcin. Se debe utilizar esto con mucha precaucin, pues es muy fcil enmascarar un error de programacin real de este modo. Cuando salta una excepcin, puede tener un valor asociado, tambin conocido como el/los argumento/s de la excepcin.
ERRORES Y EXCEPCIONES V
>>> try: ... funcion() ... except NameError, x: ... print nombre, x, sin definir ... nombre funcion sin definir La sentencia raise (hacer saltar, levantar) permite que el programador fuerce la aparicin de una excepcin. Por ejemplo:
>>> raise NameError, MuyBuenas Traceback (innermost last): File "<stdin>", line 1 NameError: MuyBuenas
ERRORES Y EXCEPCIONES VI
El usuario puede definir sus propias excepciones, tal y como aparece en la transparencia siguiente: class E(RuntimeError): def __init__(self, msg): self.msg = msg def getMsg(self): return self.msg try: raise E('mi mensaje de error') except E, obj: print 'Msg:', obj.getMsg() Visualizara: >>>Msg: mi mensaje de error