Curso Python DGA 2011/inmersion python/contenidos

Instalación
Sitio de referencia: http://python.org/download/ En linux normalmente suele estar instalado el intérprete. Puedes usar el sistema de paquetes de tu distribución o instalar desde la fuente del programa (necesitas compilador). En Windows usa el instalador apropiado.

Herramientas para programar
Nosotros vamos a ir utilizando diferentes entornos de desarrollo a lo largo del curso.

Sobre el estilo
http://docs.python.org.ar/tutorial/controlflow.html#intermezzo-estilo-de-codificacion
 * minúsculas
 * guiones bajo_entre_palabras
 * no pueden comenzar con números
 * ni se pueden usar palabras reservadas (file, assert, class, def

Introspección

 * dir
 * help( . )

Operaciones con números
Las básicas como en otros lenguajes. Operaciones matemáticas import math. Observa:

Cadenas
Inmutables. iterables. Cadenas de bytes y unicode.

if
No hay instrucción switch

for
Mejor:

range
Para repetir 10 veces algo:

Definición

 * Nueva tabla de nombres

Argumentos variables
La sintaxis *args y **kwargs en la definición de las funciones se usa para pasar un número no fijo de argumentos a la función. Un asterisco simple se usa para pasar una lista de argumentos y el doble asterisco para pasar argumentos de tipo clave:valor (diccionario)

Usando *args Usando **kwargs

Usando *args and **kwargs cuando llamamos a una función

Listas
Secuencias ordenadas. Dinámicas. Acceso por índice. Heterogéneas. Corchetes.

Tuplas
Estáticas. Paréntesis.

Excepciones
Más complejo:

¿Qué son?

 * Un objeto es una entidad que agrupa un estado y una funcionalidad relacionadas.
 * En Python un objeto es un conjunto de atributos
 * Una clase permite crear nuevos objetos que comparten los mismos atributos
 * Muy importantes para optimizar/reutilizar mejor el código

En Python todo son objetos

Y todo objeto tiene una clase.

self
Explícitamente hay que usar el self al definir las clases en Python. Se refiere a la instancia concreta del objeto. Aparecerá como primer parámetro en la definición de los métodos. Pero no se usa al llamar a las clases o a los métodos. De forma automática, Python pasa la instancia del objeto.

Clase = función

 * Al ejecutar clase se produce un nuevo valor.
 * El objeto tiene los mismos atributos que la clase salvo el operador
 * Inicializa el objeto con el método __init__
 * Le pasa objeto + parámetros a la clase.

Método __init__
Es un método opcional. Se usará cuando hay que inicializar datos.

Un método es una función asociada a un objeto
Ejemplo: self._atributo
 * Primer parametro es la instancia.
 * self por convención
 * Todas las clases heredan de object
 * Los atributos pueden añadirse, borrarse, modificarse, en cualquier momento
 * En Python todo es público
 * Por convención, lo privado empieza por _
 * ¡Python no es Java!: No "setters" y "getters"

Herencia

 * Si el padre necesitaba parámetros, hay que llamar a su método __init__

Métodos estáticos
En Python los métodos estáticos se usan mucho menos que en Java porque se pueden crear funciones estándar en los módulos. En java un método estático y un método de clase son lo mismo. En Python no. Supón que a es una función definida en la clase Madre. Cuando una clase hija hereda: Es decir: Salida: Hemos creado 3 objetos. Soy el objeto Segundo de 3 objetos.
 * Si a es un @staticmethod, Hija.a se refiere a la definición de la clase Madre.
 * Si a es un @classmethod, Hija.a apunta a la definición de la subclase.
 * @staticmethod es una función definida dentro de una clase. Se puede llamar sin haber instanciado la clase antes. Su definición es inmutable por herencia.
 * @classmethod es una función que a la que se puede llamar sin instanciar la clase, pero su definición sigue la subclase, no a la clase madre via herencia. Por eso su primer argumento es cls (class).

Ejemplo de uso:

Instalar módulos de terceros
http://docs.python.org/install/index.html

Método habitual
En linux puedes usar el sistema de paquetes de la distribución o instalar de la fuente del programa. Para instalar de la fuente: $ python setup.py install Esto instala el paquete para todo el python general que estamos usando. Necesitas permisos de administrador. Si el paquete tiene extensiones en C necesitas un compilador de C y las librerías de desarrollo de Python (algunas distros de linux instalan aparte python-dev) Algunos paquetes necesitan setuptools: descarga http://peak.telecommunity.com/dist/ez_setup.py y ejecuta el archivo.
 * Descarga la fuente (archivo comprimido o desde un sistema de gestión de código: mercurial, git, subversion ...)
 * Colócate dentro del directorio del paquete. Comprueba las dependencias (fichero README)
 * Ejecuta dentro:

Instalar con easy_install o pip
$ easy_install $ pip install Si pip no está instalado: $ easy_install pip

Uso de Virtualenv
Si no interesa instalar el módulo para todo el python (un servidor, probar varias versiones de un producto, permisos locales, etc) usamos virtualenv:

Instalar virtualenv

 * Descargar e instalar de http://pypi.python.org/pypi/virtualenv
 * o usar el sistema de paquetes de la distro.

Crear entorno
Se puede crear entorno limpio: $ virtualenv --no-site-packages proyectocool o usando los paquetes ya instalados en el sistema: $ virtualenv proyectocool Para activar el entorno $ source proyectocool/bin/activate (proyectocool) $ Para desactivar el entorno $ deactivate Ahora cuando está activado el entorno todo lo que instalamos con easy_install, pip o python setup.py se instala en el entorno virtual.