Anuncios

Bienvenidos sean a este post, hoy hablaremos sobre otras de las funciones dentro del modulo de colecciones.

Anuncios

Este tipo de dato fue agregado a partir de la version 3.3, este se comporta como un diccionario normal pero segun la documentacion oficial de Python:

Es proporcionado para vincular rapidamente un numero de asignaciones para que puedan ser tratados como una sola unidad

Guido van Rossum
Anuncios
Anuncios

Esto es mas practico y rapido que crear un diccionario con multiples llamadas de actualizacion en ellas, este objeto puede ser usado para simular ambitos simulados y utiles para la creacion de plantillas, todas las asignaciones subyacentes se asignan en una lista, la misma es publica y puede ser accedida o actualizada usando los atributos de mapas, las busquedas se hacen en las asignaciones subyacentes hasta que se encuentre una clave, por el contrario escribir, actualizar y borrar solo opera en el primer mapeo, un uso muy comun es proveer predeterminados, para ello veamos el siguiente ejemplo:

>>> from collections import ChainMap
>>> default_conn = {'host': 'localhost', 'puerto': 4567}
>>> conn = {'puerto': 5678}
>>>
Anuncios

Como siempre primero importamos el tipo de dato desde el modulo de colecciones, una vez importado vamos a crear dos diccionarios, uno se llamara default_conn y seran los valores predeterminados para nuestras conexiones y el otro se llamara conn y sera el de conexion, observen que tienen valores distintos, nuestro siguiente paso sera implementar a ChainMap:

>>> c = ChainMap(conn, default_conn)
Anuncios

Como pueden ver en un nuevo objeto almacenamos el resultado de la funcion ChainMap, primero pasamos la conexion (conn) y luego el valor predeterminado porque este dato no deberiamos modificarlo sino unicamente al primero, veamos como nos devuelve los datos:

>>> c['puerto']
5678
>>> c['host']
'localhost'
>>>
Anuncios

Como puerto existe en el primer diccionario nos devuelve el valor que posee, en cambio cuando buscamos a host nos devuelve el de los valores predeterminados, esta es su gran ventaja, veamos como esta mapeado:

>>> c.maps
[{'puerto': 5678}, {'host': 'localhost', 'puerto': 4567}]
>>>
Anuncios

Pasemos a agregar un host para nuestra conexion (conn):

>>> c['host'] = 'tinchicus.com'
Anuncios

Como pueden ver se agregan de una manera muy simple y recuerden que solo afectara a conn, si hacemos un maps ahora veremos este resultado:

>>> c.maps
[{'puerto': 5678, 'host': 'tinchicus.com'}, 
{'host': 'localhost', 'puerto': 4567}]
>>>
Anuncios

En este caso se agrego un nuevo dato pero solo afecto a conn, vamos a hacer la siguiente modificacion:

>>> del c['puerto']
Anuncios

Lo que hicimos fue borrar el puerto de conn, si hacemos un maps de nuestro ChainMap veremos lo siguiente:

>>> c.maps
[{'host': 'tinchicus.com'}, {'host': 'localhost', 'puerto': 4567}]
>>>
Anuncios

Aqui podemos ver como nos quedo un solo dato en el diccionario del inicio, automaticamente nuestro valores”predeterminados” quedaron unidos a los valores de la conexion (conn), vamos a verificarlo de la siguiente manera:

>>> dict(c)
{'host': 'tinchicus.com', 'puerto': 4567}
>>> 
Anuncios

Como ven siempre tendremos un valor para nuestro diccionario, esto gracias a simplemente agregar los valores por medio de ChainMap, el que conoce programacion de otros lenguajes mas complejos sabe lo tremendamente valioso que es esto.

Anuncios

En resumen, hoy hemos visto a ChainMap, como es su estructura, como trabaja, como podemos usarlo, un ejemplo practico para poder verlo en accion, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios
pp258

Donación

Es para mantenimento del sitio, gracias!

$1.00