El gran libro de Python. Marco Buttu

Чтение книги онлайн.

Читать онлайн книгу El gran libro de Python - Marco Buttu страница 23

Автор:
Серия:
Издательство:
El gran libro de Python - Marco Buttu

Скачать книгу

clase range tiene un argumento stop obligatorio y dos argumentos start y step opcionales:

image

      Devuelve un objeto iterable que contiene una secuencia de números progresivos. Cuando se utiliza con el argumento simple stop, el objeto contiene los números del 0 al stop exclusive:

image image

      Los argumentos opcionales start y step permiten indicar el número de inicio y el intervalo entre un número y el siguiente:

image

      La clase enumerate toma como argumento un objeto iterable y devuelve un iterador que itera sobre tuplas. Cada tupla está formada por un índice progresivo y por un elemento del objeto iterable. Cuando el objeto iterable es una secuencia seq, el índice progresivo corresponde al índice del elemento en la secuencia, por lo que las tuplas serán (idx, seq[idx]):

image

      Acabamos esta parte demostrando una importante diferencia entre iteradores y objetos iterables que no son iteradores. Mientras que para un objeto iterable que no es un iterador es posible utilizar diferentes iteradores sobre él de manera independiente, esto no es posible para un objeto iterador, puesto que el método iteratore._ _iter_ _() devuelve una referencia a sí mismo:

image

      El contexto de iteración

      La instrucción for permite iterar de forma automática sobre los objetos iterables:

image

      De hecho, utiliza el protocolo de iteración para completar automáticamente el proceso que hemos ejecutado manualmente en la sección anterior:

      1. obtiene el iterador: iterador = iter(('a', 'b', 'c'));

      2. solicita el elemento siguiente llamando al método iterador._ _next_ _();

      3. si iterador._ _next_ _() genera una excepción StopIteration, entonces captura la excepción y termina la iteración; si no, pasa al punto 4;

      4. asigna a la etiqueta i el elemento siguiente: i = iterador._ _next_ _();

      5. ejecuta el bloque de instrucciones, que en este caso son la llamada simple a print(i);

      6. regresa al punto 2.

      También los diccionarios y los archivos son objetos iterables. Cuando se itera sobre un diccionario, se itera sobre sus claves: :

image

      mientras que cuando se itera sobre un archivo, se itera sobre sus líneas:

image

      Una importante carácterística de los objetos iterables es que pueden ser desempaquetados:

image

      En esta sección haremos un ejercicio que nos servirá de resumen, y nos permitirá tanto repasar todo lo que hemos visto hasta ahora como introducir nuevos conceptos. Con este objetivo, vamos a analizar un script que lee archivos con extensión .data, realiza algunos cálculos y, por último, guarda los resultados en otro archivo. El script en cuestión es el archivo dataout.py:

image image

      NOTA

      El código fuente de todos los ejercicios finales y de los ejemplos más significativos del libro está disponible en la URL http://code.google.com/p/the-pythonic-way/.

      Es probable que gran parte de este código nos resulte confuso, pero no nos preocupemos, puesto que lo anlizaremos línea a línea en las secciones siguientes. De momento, volvamos a leerlo y esforcémonos al máximo por entender su significado nosotros solos.

      Ejecución del script

      El script lee del directorio actual los archivos con extensión .data y para cada uno de ellos crea un archivo de salida con el mismo nombre, pero con extensión .dataout. Por ejemplo, encuentra un archivo de entrada denominado 20121218.data, lo abre, lo elabora y guarda los resultados en un archivo de salida denominado 20121218.dataout. El script escribe sobre cada línea de los archivos de salida tres valores: el mínimo, el máximo y el medio de las correspondientes líneas de los archivos de entrada. Por ejemplo, si el script encuentra en el directorio actual el siguiente archivo de entrada:

image

      lo abre, calcula los valores mínimo, máximo y medio de los elementos de la línea y los escribe en el archivo de salida:

image

      Si el archivo de entrada tiene más de un línea, como el siguiente:

image

      el archivo de salida tendrá el mismo número de líneas, cada una de las cuales con el valor mínimo, máximo y medio de la correspondiente línea del archivo de entrada:

image

      El script acepta el argumento opcional desde la línea de comandos, que representa el nombre del directorio en el cual guardará el archivo. Si no se le pasa este argumento, los dos archivos de salida se guardarán en un directorio llamado out:

image

      En cambio, si pasamos desde la línea de comandos un argumento, este se utilizará como en el directorio de salida:

image

      Si el directorio de salida existe, el script lo señala con un primer mensaje en pantalla y después continúa su ejecución:

image image

      Ahora que ya sabemos qué hace el script, trataremos de entender el significado de su código. El primer paso consiste en descubrir cómo lee los argumentos pasados

Скачать книгу