El gran libro de Python. Marco Buttu
Чтение книги онлайн.
Читать онлайн книгу El gran libro de Python - Marco Buttu страница 23
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:
Los argumentos opcionales start y step permiten indicar el número de inicio y el intervalo entre un número y el siguiente:
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]):
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:
El contexto de iteración
La instrucción for permite iterar de forma automática sobre los objetos iterables:
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: :
mientras que cuando se itera sobre un archivo, se itera sobre sus líneas:
Una importante carácterística de los objetos iterables es que pueden ser desempaquetados:
Ejercicio final
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:
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:
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:
Si el archivo de entrada tiene más de un línea, como el siguiente:
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:
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:
En cambio, si pasamos desde la línea de comandos un argumento, este se utilizará como en el directorio de salida:
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:
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