Tema 5: Python

Este tema pretende que comprendáis la filosofía de Python y su sintaxis, os capacitará para realizar páginas en Django (siguiente tema) y scripts complejos. Está desarrollado de manera directa, a base de ejemplos, para ir aprendiendo rápidamente. Para una consulta más profunda del lenguaje he dejado en las referencias un libro completo, “Python para todos” [5], el cual recomiendo ojear; y para consultas concretas de funciones y librerías consultad la web oficial de Python [6]. En este tema doy por supuesto que todos tenéis conocimientos de programación.

Índice

  1. Introducción.
  2. Listas, tuplas, conjuntos y diccionarios.
  3. Condicionales y bucles.
  4. Funciones.
  5. Orientación a objetos: clases y herencia.
  6. Trabajar con fechas.
  7. Tratamiento de ficheros.
  8. Control de errores.
  9. Huevos de Python.

1. Introducción

Al fin llegamos al lenguaje Python, del que muchos habéis oído hablar por su claridad y flexibilidad.

Python es un lenguaje de programación creado alrededor de 1990 por Guido van Rossum y cuyo nombre, al contrario de lo que parece, no se refiere a la serpiente pitón sino que hace referencia al grupo humorístico británico Monty Python.

No puedo resistirme a poneros ya algo de código, voy a empezar sorprendiendo con la simpleza del clásico “Hola mundo”. Mientras que en Java es algo como:

En Python es simplemente:

Como veis ya empieza a demostrar su claridad.

Una de las características sintácticas que más llaman la atención sobre Python es que no usa ningún tipo de etiqueta ni delimitadores de bloque como llaves ({ }) o begin-end, simplemente hace uso del sangrado del código o indentación para reconocer el anidamiento. Esto hace que el código de un programa Python deba estar correctamente sangrado y lo hace fácilmente légible a la fuerza. Tampoco necesita de caracteres de finalización de línea como el punto y coma (;) de otros lenguajes.

Veamos un ejemplo de código Python donde al eliminar caracteres innecesarios nos fijamos mejor en las líneas de programación importantes:

La primera línea define una función factorial que recibe un argumento x. Python utiliza tipado dinámico por lo que no hay que especificar el tipo de las variables, esa x puede ser cualquier cosa a la hora de llamar a la función.

La segunda línea al estar indentada ya indica que pertenece a la función, lo mismo ocurre con la tercera línea, está dentro del if.

Como el tipado es dinámico se pueden hacer asignaciones como éstas:

También asignar varias a la vez:

Otra de las buenas características de Python, pero no exclusiva, es el disponer de un modo interactivo o shell donde poder escribir las expresiones o probar nuestro código. Simplemente con ejecutar el comando python ya tenemos el shell abierto:

Y ya solo habría que ir introduciendo el código:

Instalación de Python

Recomiendo usar Python para ir haciendo pruebas conforme se lee el tema, los usuarios de Linux y Mac OSX ya lo tendrán instalado, y los usuarios de Windows podéis descargar el instalador aquí [3]. Además será necesario tenerlo instalado para el tema de Django, a ser posible de la versión Python 2.6.5 en adelante para poder utilizar la última versión de Django. Sino al menos Python 2.4 (para Django 1.3) o Python 2.5 (Django 1.4). En esta entrada encontraréis más información sobre la instalación.

El modo interactivo por defecto de Python está bien pero recomiendo utilizar ipython [4] que está aún mejor, con autocompletado. Si disponéis de easy_install su instalación es tan simple como poner:

O aún mejor recomiendo instalar antes pip, que es otro instalador de paquetes de Python:


2. Listas, tuplas, conjuntos y diccionarios

Los elementos iterables como las listas, tuplas, conjuntos y diccionarios son los tipos de datos por excelencia en Python, muy similares a los arrays de otros lenguajes.

Listas

En Python una lista puede contener cualquier tipo de datos y no tienen por qué ser del mismo tipo. Veamos una interacción con el shell de Python para entender su funcionamiento:

Algunas operaciones más sobre listas (split, strip y join):

Las funciones map y lambda se explican más adelante.

Tuplas

Las tuplas son iguales que las listas en cuanto a acceso pero en una tupla no se permite insertar. eliminar, ni reasignar elementos. Veamos un ejemplo:

Conjuntos

Los conjuntos, al igual que en álgebra, son agrupaciones de elementos no ordenados donde no se permiten elementos repetidos y que permiten realizar operaciones de grupo como unión, intersección y diferencia. Veámoslo con un ejemplo:

Vamos a ver ahora como uno de los usos más comunes de los conjuntos es eliminar los elementos repetidos de una lista:

Diccionarios

Un diccionario es una colección de datos, no ordenados, donde cada dato tiene asociada una clave única. Los datos se pueden modificar pero no así la clave. Veamos algunos ejemplos de uso:


3. Condicionales y bucles

Sentencia if

La construcción de la sentencia if en Python es similar a la de otros lenguajes, permite varios o ningún else-if, que se escribe como elif, y uno o ningún else.

Y también permite una construcción en una sola línea del tipo:

Aprovechamos que estamos hablando de sentencias condicionales para exponer algunas operaciones booleanas:

 While

 For

Sin duda el bucle for será lo que más utilicéis a la hora de programar en Python ya que puede iterar sobre cualquier elemento iterable: listas, tuplas, resultados de consultas…

Compliquemos un poco más el código:

Como veis se hace uso de %s para imprimir variables como cadenas dentro de otras, podríamos haber puesto también cualquiera de estas dos opciones:

Podemos hacer uso también de generadores de cadenas como range:

O utilizar for para construir cadenas:


4. Funciones

Las funciones se definen con la palabra def seguida del nombre de la función y los parámetros entre paréntesis, si tiene. Veamos como ejemplo la función factorial con la que empezamos:

Voy a aprovechar para avanzar un poco más y explicar como se organiza el código Python en módulos que pueden ser importados. Imaginaos un fichero llamado sucesiones.py con el contenido:

Las primeras dos líneas no son obligatorias pero sí convenientes, indican la ruta del intérprete Python y el encoding del fichero. La primera línea de la función sucesion_fibonacci entre triples dobles comillas indica el texto que aparecerá cuando busquemos información sobre esta función.

Ahora, si en el mismo directorio que el fichero anterior ejecutamos:

También podríamos importar las dos funciones:

Todo:

O solo el nombre del módulo:

Volviendo al tema de las funciones, podemos especificar un valor por defecto en una función de la forma:

Paso de argumentos

Supongamos que tenemos un fichero con código Python llamado suma.py, podríamos ejecutar el fichero de la forma:

Y cuyo código sea:

Otra forma de pasar argumentos es pedir que el usuario los introduzca, para ello podemos hacer uso de raw_input [5]:

Y si, por ejemplo, queremos que introduzca una contraseña y que no se visualice por pantalla conforme escribe podemos utilizar getpass [6]:

Funciones lambda, map y filter

Una función lambda es una función anónima creada en una sola línea que se suele utilizar en conjunción con otras funciones como map y filter. Map aplica una función dada a todos los elementos de la colección pasada. Filter realiza un filtrado de la colección según cada elemento cumpla o no la función aplicada.

Por ejemplo:


5. Orientación a objetos: clases y herencia

Clases

Las clases en Python siguen la misma filosofía que en otros lenguajes orientados a objetos. Cojamos como ejemplo la clase que utiliza Raúl González en el libro Python para todos:

Y hagamos uso de ella:

Herencia

A diferencia de otros lenguajes Python permite la herencia múltiple. Veamos un ejemplo de herencia simple y múltiple:

En el cocodrilo se utiliza el comportamiento de Terrestre al estar más a la izquierda en la definición de la clase.

La sentencia pass de Python es como unas llaves vacías ({}) en C o Java. Se usa porque Python, al no utilizar delimitadores de bloque, no puede saber si está vacío o mal indentado.


6. Trabajar con fechas

Mostraré algunas de las operaciones más comunes sobre fechas, que os puedan servir.


7. Tratamiento de ficheros

A continuación expongo algunos de los usos básicos de Python en cuanto a tratamiento de ficheros.

Lista con todos los ficheros de un directorio:

Lista con todos los ficheros con una extensión dada:

Discriminar entre directorio, fichero o enlace:

Lectura y escritura de ficheros:


8. Control de errores

La captura de errores se realiza a través de las sentencias try/except. Veamos un par de ejemplos:


9. Huevos de Python

Como buena serpiente, Python pone huevos… Bueno, no es ese el motivo pero sí que viene de ahí su nombre. No quería terminar el tema sin explicar qué son los huevos de Python (Python eggs).

Un huevo Python no es más que módulos de Python empaquetados de manera que facilita su instalación, parecido al JAR de Java. En él se incluye información diversa como los módulos de los que depende, la documentación relativa al software o la versión de la que se trata, de manera que las dependencias del proyecto puedan ser comprobadas y satisfechas en el momento de la ejecución.

El gestor de paquetes por excelencia es easy_install o su sucesor pip. Con ellos instalamos, borramos y actualizamos los eggs de Python. En el tema siguiente veremos su funcionamiento ya que instalaremos Django como un huevo más de Python.


Referencias

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *