[Python-es] Convertir de mutable a inmutable

lasizoillo lasizoillo en gmail.com
Dom Abr 24 16:38:25 CEST 2011


El día 24 de abril de 2011 13:43, Pepe Aracil <pepe en diselpro.com> escribió:
> Hola Nekmo.
>
> Creo que me he explicado mal, la idea de usar repr() no es para parsear JSON
> que para eso ya existe el módulo json.
> Mi intención es cachear peticiones JSON/RPC  que se traducen en diccionarios
> python en el lado del server. Para lo cual necesito que estos diccionarios
> puedan formar parte de las keys de un diccionario que contiene los
> resultados cacheados. Para tal fin hay que transformar estos diccionarios en
> objetos inmutables y repr() es una de las opciones, otra podria ser Pickle.
>
> Si las cadenas json/rpc son muy largas, simpre se pueden acortar en md5:
>
> jsonObj = { "method": "echo", "params": ["Hello JSON-RPC"], "id": 1}
> result = doJsonMethod(jsonObj)
>
> hashable = md5.new(cPickle.dumps(jsonObj)).digest()
> cache[hashable] = result
>

Entiendo que echo es una función pura (el retorno de la función solo
depende de los parámetros de entrada). Si cacheas el resultado de la
función echo con el nombre de la función y los parametros de entrada
estarás haciendo algo. Si metes además en la clave de caché el id de
llamada, que tenderá a ser un identificador que no se repita, el
número de caché hits tenderá a cero.

Mira a ver si la "memoization" de las funciones expuestas a través de
json-rpc resuelven tu problema:
http://en.wikipedia.org/wiki/Memoization

Saludos:

Javi


Más información sobre la lista de distribución Python-es