domingo, 24 de marzo de 2019

T2. WITH. EN BUENA COMPAÑÍA.

LADERAS DEL BARRANCO DE LEMES, EN FASNIA, DONDE ENCONTRAMOS COLADAS LÁVICAS DE PUMITA Y ARENISCA COMO BASE DE LAS BASÁLTICAS, MÁS OSCURAS Y DURAS ENCIMA, Y  CON ALVÉOLOS PROVOCADOS POR EL OXÍGENO Y MODELADOS POSTERIORMENTE POR LA EROSIÓN, QUE SIRVEN DE NIDAL Y REFUGIO PARA LAS AVES, SUR DE TENERIFE.

      La declaración o, si lo preferimos, la palabra clave (keyword) with se utiliza en Python para crear un entorno de trabajo desde el que ejecutar acciones. Nos permite ejercer un mayor control sobre la sintaxis que empleamos y las excepciones que podamos administrar (manejo o tratamiento de excepciones). En consecuencia, su uso no es obligatorio, ni mucho menos, pero según sean las circunstancias de nuestro código, sí muy recomendable.
La sentencia with se suele emplear en Python cuando vamos a trabajar con recursos que no administramos nosotros directamente sino que lo desarrolla el propio programa de manera interna. Como, precisamente,  no lo podemos controlar directamente, generamos un entorno de trabajo con with para garantizarnos que las cosas van a suceder como debiera y. muy importante, se produzca una limpieza del propio recurso cuando concluye su ejecución y cerrándolo en el caso de que quede abierto, gastando memoria sin necesidad.
Habíamos comentado antes que nos permite ejercer un mayor control sobre las excepciones (errores), ¿verdad? Pues a pesar de que se lancen excepciones, con with podremos limpiar y culminar un proceso de manera eficiente. 
Vemos su estructura:


Vemos que en la primera línea debemos usar un alias a través de la cláusula as para proporcionarle un nombre al entorno que genera with y poder llamarlo. Recurre también a un bloque de código indentado para determinar, como sucede con los bucles o las funciones definidas por el usuario, un ámbito (scope) operativo dado que se trata de una estructura de flujo.
En cierto modo, sustituye a un bloque try/except como vimos en el capítulo dedicado al tratamiento de excepciones (v. TRATAMIENTO DE EXCEPCIONES). Una vez concluida su tarea cerrará de manera automática los procesos abiertos (como, por ejemplo, un archivo de texto abierto en modo escritura) sin necesidad, incluso, de llamar al método ad hoc que se encargaría de hacerlo: close(), o el que corresponda en otros procesos. Vemos un ejemplo de uso:


Su uso más habitual, aunque no el único, es con la apertura de ficheros, donde nos garantiza un cierre seguro y la limpieza del propio, proceso. En el caso de que aconteciera una excepción (error) o. aún, con el bloque de código de with finalizando en break, continue o return, igualmente suscita el cierre y pelillos a la mar.
Vamos a ver cómo obtenemos un resultado similar con el uso de try/except:


CARDÓN. PLANTA EUPHORBIÁCEA (¡NO ES UN CACTUS!) ENDÉMICA DE TENERIFE Y DEL RESTO DE LAS ISLAS DEL ARCHIPIÉLAGO SALVO LANZAROTE, UBICADA DE MANERA NATURAL EN  ZONAS AGRESTES DE LAS ÁREAS MÁS CÁLIDAS (PISOS TÉRMICOS), ENTRE LOS 100 Y LOS 900 METROS DE ALTITUD.