Académique Documents
Professionnel Documents
Culture Documents
Wilderman Ceren
Ingeniero de Sistemas Especialista en Telecomunicaciones
Consultor y experto en soluciones informticas basadas en software libre
Desarrollo de Software
LAMP, Python (Bindings),PERL, BASH, Fortran, algo de C,C++,Java,Tomcat,XML, webservices (SOAP, XML-RPC). BD> MySQL, PostgreSQL, sqlite, BerkeleyDB
Redes
Enrutamiento, Interoperabilidad entre dispositivos propietarios y libres, sistemas embebidos, firewalls, IDS.
Sistemas distribuidos
GNU/Linux (debian, gentoo, RHEL, ubuntu, otros) FreeBSD, OpenBSD & NetBSD. Seguridad en Embebidos: m0n0wall, pfSense
Seguridad
Contenido
1. Que puedo hacer con Python ? 2. Puntos tcnicos fuertes 3. El intrprete 4. Implementacin alternativa
1. Cpython 2.Jython 3.IronPython
Contenido
6.Tipos de Objetos
Contenido
7. Nmeros
Literales numericos Operadores Variables y Expresiones basicas Formatos de visualiz. Numerico Division (classic y floor) Operaciones Bitwise Entero Largo Nmero complejo
Contenido
8.Nmeros
9.Cadenas
Contenido
Indexado y Cortado (indexing and slicing) Herram. De Conversion Formateo de Cadenas Mtodos Categorias de tipo general Operaciones basicas Indexado, Cortado y Matrices Mutabilidad
10.Listas
Contenido
11.Diccionarios
Operaciones basicas Mutabilidad Usos Sintaxis Conversiones e inmutabilidad Por que Listas y Tuplas?
12.Tuplas
Contenido
13.Archivos
Objetos en archivos Pickle Otras herramientas de archivo Tipos de Categoria Jerarquia de Tipos Otros tipos Tipos Built-in
Contenido
14. Sentencias en Python
Sintaxis a partir de sangras Casos especiales Manejo de errores con entrada de texto Manejo de errores con sentencias try
Contenido
Asignando en secuencia Asignacin mltiple Asignacin aumentada Reglas para nombrar variables Sentencias en expresiones Cambios en el mismo lugar Redirigiendo el flujo de salida
Contenido
18. Sentencias if
Ejemplo basico Multi-ramificacin con if elif Reglas para sintaxis python Delimitadores de bloque Delimitadores en sentencias Casos especiales Tests de verdad Expresion ternaria (if/else)
Contenido
19. Loops while y for
break, continue, pass, break y else Iterators Iterators a nivel de archivo Otros iterators embebidos (built-in) & user-defined Tcnicas para codificar loops Usos de range, zip y map Generacin de offsets e items con enumerate
Contenido
20. Comprensin de lista
Contenido
PyDoc: Funcin de ayuda Para que utilizar funciones ? Codificacin de una funcin
22. Funciones
Contenido
23. Alcance y argumentos
Reglas en el alcance (scope) Conceptos Bsicos del alcance Ejemplos Alcance integrado La sentencia global Minimizar uso de variables globales Minimizar cambios en archivo cruzado Otras formas de accesar globalmente Alcances y funciones anidadas
Contenido
Pasando argumentos Argumentos y referencias compartidas Evitando los cambios mutables en argumentos Simulando parmetros de salida Modos de concordancia de argumentos Valores default y keyword Argumentos arbitrarios Combinando keywords y default Ejemplo general de uso de funciones
Contenido
24.Funciones Avanzadas
Expresiones lambda Por que usar lambda ? lambdas anidados y alcances comando apply Sintaxis de llamada similar a apply
Contenido
Comprensin de lista: Mappings Conceptos bsicos Aadiendo tests y loops anidados Comprensin de lista y matrices Iterators: Generators
Protocolo Funcin Generator Extendida: send y next Iteratores y tipos de datos integrados
Alternativas en la coordinacin en iteracines Conceptos en el diseo de funciones Funciones son objetos: llamadas indirectas Tips en Funciones (Para tener en cuenta)
Contenido
Nombres locales detectado estticamente Objetos default y mutables Funciones sin retorno alguno
25. Mdulos
Contenido
Programar un mdulo
Creacin Uso (import, from) Namespaces Recargar un mdulo Import Por que utilizar import de paquete? Ocultando datos Habilitando futuras caracteristicas Mezclando modos de uso Import Relativo Conceptos en diseo de mdulos Gotchas
Paquetes
Contenido
26. Clases y POO
Sentencia Clase Mtodos Herencia Operador de Sobrecarga Iteracines definida por el usuario Privacidad para los atributos en instancias
Contenido
Namespaces Python y POO Clases como registros POO y herencia: relaciones Is-a POO y composicin: relaciones Has-a POO y delegacin Herencia mltiple Clases son objetos: Generic Factories Mtodos son objetos: Bound o unbound Revisin a la Docmentacin con Strings
Contenido
Clases Vs Modulos Extendiendo tipos de datos Built-in Atributos para clase seudoprivada Nuevo estilo para clases Static y mtodos de clase Funcin decorators Gotchas (Tips)
Contenido
Objetos Exception
Contenido
Objetos Exception
Excepcion basada en clase formas y sentencias generales raise Excepciones anidadas (nesting exception) Lenguajes en excepciones Tips para diseo de Excepciones Gotchas Resumen del Core
Introduccin
Calidad del Software * Productividad ** Portabilidad Librerias de soporte Integracin de componentes Se disfruta!
YouTube BitTorrent Intel, Cisco, HP, Seagate, Qualcomm Pixar Nasa ESRI (GIS) NSA OLPC
Scripting y software standalone Lenguaje de Propsito General Web, Juegos, Robtica, Aeronutica Programacin a nivel de SO. GUIs (Tkinter, wxPython) PythonCard Dabo Otros GUIs: Qt, GTK, MFC, Swing Jython & servicios Python CGI
Internet Scripting Integracin de componentes (C,C++, COM (MSWin), Jython, .NET (IronPython), CORBA) Base de Datos (Sybase, Oracle, Informix, ODBC, MySQL, PostgreSQL, SQLite, BDB, Firebird) Rpido en Prototipos hacia C/C++ Programacin Numrica y Cientfica (Numpy) Juegos, Imagenes, AI, XML, Robotica ... y ms!
Orientado a Objetos
Linux/Unix, Windows/DOS, Mac OS X, BeOS, OS/2 Sistemas de Tiempo Real (VxWorks) Cray IBM mainframes PDAs, Celulares con Symbian/Windows Mobile Consolas de juego, iPods y mas...
Es poderoso
Hbrido (se integra con lenguajes scripting Perl,TCL y tradicionales como C/C++) Tipificacin dinmica (no declaracin previa) Manejo automtico de memoria Se programa en proyectos largos y complejos (uso de mdulos, clases y excepciones) Objeto tipos Built-in Tools Built-in Utilidades desde terceros
Python API permite a rutinas C ser llamadas desde python mismo. Se puede prototipear en Python y luego llevarlo a C/ C++ una vez al tiempo. codificalo y correlo de una!
Facilidad de uso
3. El intrprete
Es una clase de programa que invoca otro programa. Es la capa lgica de software entre el cdigo y el hw de computadora. Auto-Instala en Windows (Click->Siguiente) Linux/Mac OS X preinstalado?, compilan fuente o packs RPM/DEB Disponibilidad: iPod, consolas de juego, celulares
3. El intrprete
Ejecucin de programa
3. El intrprete
Archivo Texto Fuente -> Intrprete -> byte code -> maquina virtual Extension .pyc : archivo byte code (binario) Es un big loop ke interactua entre las instr. bytecode Es slo una parte del sistema ke conforma python.
3. El intrprete
Implicaciones en el rendimiento
C/C++ mas eficientes en la corrida o ejecucin Bytecode es una represent. python no cdigo maquina Cdigo se ejecuta a medida. que se escribe Bytecode sigue interpret. Y requiere mas CPU Entorno Desarrollo & Ejecucin son iguales Compilador presente en runtime No Compilar -> Enlazar, solo haga y ejecute! Todo sucede cuando se ejecuta el code
Implicaciones en el desarrollo
4. Implementaciones Alternativas
1.Cpython
Portar cdigo Python a C ANSI (ActivePython distro) Implementacin estandar de referencia del lenguaje Integracin con Java (scripts corren como java apps) Clases Java que portan el cdigo python a la JVM.
2. Jython
4. Implementaciones Alternativas
3. IronPython
Permite a scripts python integrarse con aplicaciones codificadas para correr sobre .NET Framework Acta como componente cliente/servidor para ser invocado por otros lenguajes .NET Desarrollado por Microsoft (propietario de .NET)
Despues de estar instalado apropiadamente ejecutar desde el prompt (w32 o unix): python Si deseas ejecutarlo desde cualquier sitio, agregarlo a la variable de entorno PATH (unix) /usr/bin/python o PATH (w32) asi C:\Python25\python Prompt: >>> {command line}
Para salir del interprete: unix -> CTRL+D, w32 -> CTRL+Z Para saber valor de variables no es necesario utilizar print Ejecuta instruccin a instruccin y no necesita cargar script completo .
Sirve para experimentar el lenguaje y utilizarlo para comprobar porciones de cdigo Escriba solo comandos No utilice sangrado en este modo
Guardar permanentemente el cdigo en archivos (mdulos) Modulos => programas ? Scripts => conjunto de mdulos que corren directamente. Prueba: Crear fichero spam.py y ejecutarlo
print 2 ** 8 # exponencial print 'El lado brillante' + 'de la vida' #concatenar
w32: Al editar asocie el archivo a guardar con extensin .py w32: deshabilite del sistema la opcin de ocultar extensiones Utilice nombre+extension al ejecutar: python spam.py y no python spam Al importar mdulo, no es obligado utilizar extensin: import spam Utilice sentencia print en scripts para resultados
1era linea de cdigo: #!/usr/bin/python Aplicar privilegio de ejecutable: chmod +x file.py scripts no requieren obligatoriamente extension .py (contrario a w32) En algunos unix: Es probable evitar en cabecera el python full path usando env asi: #!/usr/bin/env python
Asocia los .py para que se ejecuten con el IDLE (intrp. del lenguaje) con un simple doble click. unix: toca asociar los .py con el explorador de archivos empleado. Utilice al final raw_input() de truco para poder pausar el script al ejecutarlo con doble click clickear script, impide ver mensajes de error. Mejor use linea de comandos o IDLE. Mejor clickear scripts cuando ya estn depurados. Use .pyw para construcciones especiales w32 y evitar que aparezca la consola
Cada fichero .py viene siendo un mdulo. Use import para acceder a los items definidos en un mdulo. El modelo de servicios basado en mdulos participa dentro del core como arquitectura de un programa en python. El mdulo principal o de ms alto nivel es el nico ke es lanzado para iniciar el programa entero. import tambien ejecuta un script (solo una vez en la misma sesin IDLE): reload, permite ejecutar muchas veces el mismo script previamente cargado (importado) en la misma sesin
Un mdulo es un paquete de nombres de variables conocido como namespaces. Cada nombre dentro de ese paquete es un atributo. Un atributo es un nombre de variable unido a un objeto. Ejemplo: crear .py, defina una variab y luego desde el IDLE importelo e imprima el valor de esa variable (atributo). Utilice import y from / import Utilice dir() para listar los atributos de un mdulo:
>>> dir(threenames) ['_ _builtins_ _', '_ _doc_ _', '_ _file_ _', '_ _name_ _', 'a', 'b', 'c']
Le permite editar, correr, visualizar y depurar programas python. Portable, basado en TKInter GUI Toolkit w32: es fcil de interactuar con el Siempre agregue a los archivos extension .py Ejecute los scripts desde el menu (Run->Run module) Es necesario recargar mdulos anidados desde el mdulo principal. No existe un limpiar pantalla TKInter no responde ante el tratamiento de hilos (threads) Depura con slo clickear el script.-
Eclipse + pyDev (libre) Komodo (comercial) PythonWin (ActiveState) Otros: WingIDE, pyCard
Se aplica en dominios especializados. Embebido = ejecutado por otro programa Es posible correr cdigo python dentro de un programa C (integracin Python/C)
include <Python.h> ... Py_Initialize(); PyRun_SimpleString(x = brave + sir + robin);
Byte code + intrprete => binario ejecutable Como despliegue de producto final, asemeja a una aplicacin convencional (click a iconos, linea de comandos)
6. Tipos de Objetos
Incorporados Built-In
Si est hecho un procedimiento, para ke redisearlo? Hace fcil la escritura de programas Componentes de extensiones => clases python o interfaces C Son mas eficientes ke estructuras personalizadas Hacen parte del estndar del lenguaje
6. Tipos de Objetos
Tipo de datos esenciales
1234, 3.1415, 999L, 3+4j 'spam', abcd's [ 1, [ 2, 'three' ], 4 ] { 'food' : 'spam', 'taste' : 'yum' } ( 1, 'spam', 4, 'U' ) myfile = open( 'eggs', 'r' ) sets, types, None, Booleans
Declarados dinmicante. Fuerte en las operaciones vlidas que correspondan con la naturaleza del objeto.
6. Tipos de Objetos
Nmeros
Enteros (integers):
Punto flotante (float): >>> 1.5 * 4 Ilimitada-precision (long integer con parte imaginaria): >>> 2 ** 100
1267650600228229401496703205376L
6. Tipos de Objetos
Nmeros
random: mdulo aleatorio >>> import random >>> random.random( ) 0.59268735266273953 >>> random.choice([1, 2, 3, 4]) 1
6. Tipos de Objetos
Strings
Guardan informacin textual o una arbitraria coleccin de bytes. Una secuencia de un caracter Operaciones con strings:
>>> >>> 4 >>> 'S' >>> 'p' S = 'Spam' len(S) S[0] S[1]
6. Tipos de Objetos
Strings
El 1er item est en la posicin 0 y el ultimo en len(s)-1 Indice negativo va a relacin de der. a izq: S[-1] => 's' Corte en la secuencia (slice):
>>> S 'Spam' >>> S[1:3] 'pa'
6. Tipos de Objetos
Strings
Cortado (slice):
>>> S[1:] 'pam' >>> S 'Spam' >>> S[0:3] 'Spa' >>> S[:3] 'Spa' >>> S[:-1] 'Spa' >>> S[:] 'Spam'
6. Tipos de Objetos
Strings
Concatenacin:
>>> S 'Spam' >>> S + 'xyz' 'Spamxyz' >>> S * 3 'SpamSpamSpam'
+ => Suma numrica o concatenar cadenas (polimorfismo) Strings son inmutables: S[0] = 'z' Error! Pero: >>> S = 'z' + S[1:] >>> S 'zpam' #correr expresion para crear nuevo objeto
6. Tipos de Objetos
Strings
Ayuda en linea: para conocer mtodos y atributos de una instancia utilice dir(S),help(S.{method})
6. Tipos de Objetos
Strings
Multilinea:
Patterns:
>>> import re >>> match = re.match('Hello[\t]*(.*)world', 'Hello World') >>> match.group(1) 'Python '
Python
6. Tipos de Objetos
Listas
Secuencia mas general del lenguaje. Coleccin ordenada de distintos objetos arbitrarios y sin tamao predefinido Mutable (modificable) Operaciones: >>> L = [123, 'spam', 1.23] >>> len(L) 3
>>> L[0]
123 >>> L[:-1] [ 123, 'spam' ] >>> L + [4, 5, 6] [ 123, 'spam', 1.23, 4, 5, 6 ] >>> L [ 123, 'spam', 1.23 ]
Sort:
>>> M = ['bb', 'aa', 'cc'] >>> M.sort( ) >>> M ['aa', 'bb', 'cc']
Reverse:
Chequeo de Saltos:
>>> L [123, 'spam', 'NI'] >>> L[99] ...error text omitted... IndexError: list index out of range >>> L[99] = 1 ...error text omitted... IndexError: list assignment index out of range
Anidamiento (Nesting):
>>> M = [[1, 2, 3], # Una matriz 3 x 3 matrix, como listas anidada [4, 5, 6], [7, 8, 9]] >>> M [[1, 2, 3], [4, 5, 6], [7, 8, 9]] >>> M[1] # valor en fila 2 [4, 5, 6] >>> M[1][2] #ubica fila 2, entonces extrae item 3 dentro de esa fila 6
6. Tipos de Objetos
Diccionarios
No son secuencias, sino conocidos como mapeos. Igualmente son colecciones de otros objetos. Mutables! Codificados entre corchetes
>>> D = {'food': 'Spam', 'quantity': 4, 'color': 'pink'} >>> D['food'] # captura valor de llave 'food' 'Spam' >>> D['quantity'] += 1 # Agrega 1 a valor 'quantity' >>> D {'food': 'Spam', 'color': 'pink', 'quantity': 5}
Construccin de diccionario:
>>> >>> >>> >>> >>> >>> Bob
D = {} D['name'] = 'Bob' # Crear llave por asignacin D['job'] = 'dev' D['age'] = 40 D{'age': 40, 'job': 'dev', 'name': 'Bob'} print D['name']
Anidamiento en diccionario:
>>> rec['name'] # 'Name' {'last': 'Smith', 'first': 'Bob'}
rec = {'name': {'first': 'Bob', 'last': 'Smith'}, 'job': ['dev', 'mgr'],'age': 40.5} es un diccionario anidado
>>> rec['name']['last'] # valor del indice last en el dicc anidado 'Smith' >>> rec['job'] # 'Job' is a nested list ['dev', 'mgr'] >>> rec['job'][-1] # Index the nested list 'mgr' >>> rec['job'].append('janitor') # aumenta para Bob en job descripcin >>> rec {'age': 40.5, 'job': ['dev', 'mgr', 'janitor'], 'name': {'last': 'Smith', 'first':'Bob'}}
Ordenamiento de diccionarios:
>>> D = {'a': 1, 'b': 2, 'c': 3} >>> D {'a': 1, 'c': 3, 'b': 2}
Utilizando estructura loop podemos ordenar el diccionario: >>> Ks = D.keys( ) # lista de llaves desordenada >>> Ks ['a', 'c', 'b'] >>> Ks.sort( ) # lista de llaves ordenada >>> Ks ['a', 'b', 'c'] >>> for key in Ks: # Iterar dentro though sorted keys print key, '=>', D[key] a => 1 b => 2 c => 3
6. Tipos de Objetos
Tuplas
Secuencia similar a una lista pero inmutable como los strings. Operaciones bsicas:
>>> T = (1, 2, 3, 4) # A 4-item tuple >>> len(T) # Tamao 4 >> T + (5, 6) # Concatenacin (1, 2, 3, 4, 5, 6) >>> T[0] # Indexado, cortado y mas 1
Por que tuplas: Por la facilidad de uso en usar una especie de lista pero donde sus valores sean inmutables.
6. Tipos de Objetos
Archivos
Otros tools similares a manejo de archivo: pipes, fifos, sockets, archivo de acceso por llaves, persistencia en objetos, basado en descriptores, relacional y base de datos de interfaz orientada a objetos.
6. Tipos de Objetos
Otros tipos core
>>> X = set('spam') >>> Y = set(['h', 'a', 'm']) # 2 sets de secuencias >>> X, Y (set(['a', 'p', 's', 'm']), set(['a', 'h', 'm'])) >>> X & Y # Interseccion set(['a', 'm']) >>> X | Y # Union set(['a', 'p', 's', 'h', 'm']) >>> X Y # Diferencia set(['p', 's'])
>>> import decimal # Decimales >>> d = decimal.Decimal('3.141') >>> d + 1 Decimal("4.141") >>> 1 > 2, 1 < 2 # Booleanos (False, True) >>> bool('spam') True >>> X = None # None asignacin >>> print X None >>> L = [None] * 100 # Inicializar una lista con 100 Nones >>> L [None, None, None, None, None, None, None, None, None, None, None, None, None, ...a list of 100 Nones...] >>> type(L) # Tipos <type 'list'> >>> type(type(L)) # Incluso, types son objetos <type 'type'>
Formato general:
Header line: Nested statement block
Asignacin crea referencias a objeto Variables se crean al asignarse Nombres deben ser asignados antes de ser referenciados Asignaciones implicitas: import, from, def, class, function arguments
spam = 'Spam' [spam, ham] = ['yum', 'YUM'] a, b, c, d = 'spam' spam = ham = 'lunch' Spams += 42 >>> >>> >>> >>> (1, >>> >>> (1, >>> >>> >>> >>> (2, nudge = 1 wink = 2 A, B = nudge, wink # Tuple assignment A, B # Like A = nudge; B = wink 2) [C, D] = [nudge, wink] # List assignment C, D 2) nudge = 1 wink = 2 nudge, wink = wink, nudge # Tuples: swaps values nudge, wink # Like T = nudge; nudge = wink; wink = T 1)
>>> a = b = c = 'spam' >>> a, b, c ('spam', 'spam', 'spam') >>> c = 'spam' >>> b = c >>> a = b