Estoy trabajando con xlwt
que tiene un límite de 4k sobre cuántos estilos se pueden definir en un documento de Excel.¿Cómo hash * args ** kwargs para la memoria caché de funciones?
Normalmente, se crea estilos de este modo:
style = xlwt.easyxf("font: bold 1")
Lo cual simplemente se sustituye con
def cached_easyxf(self, format):
return self._cache.setdefault(format, xlwt.easyxf(format))
que funciona perfectamente. Ahora, descubrí que a veces tengo que pasar argumentos de palabras clave que me hicieron pensar: ¿cómo debo hash la firma args/kwargs?
¿Debo crear una clave de caché basada en str (valor)? ¿Conservar en vinagre? ¿Qué es más robusto?
Para mi situación que parece que sólo puede convertir clave/valor a las cadenas y añadirlo a mis llaves ... pero ahora tengo curiosidad por saber de forma genérica para manejar esto con, por ejemplo tipos unhashable como arg=[1, 2, 3]
def cached_call(*args, **kwargs):
return cache.get(what_here)
cached_call('hello')
cached_call([1, 2, 3], {'1': True})
Gracias por la respuesta Raymond! Muy apreciado –
¿Funcionaría lo siguiente igual de bien: 'key = (args, tuple (ordenado (kwds.items())))'? ¿O es más lento debido a las tuplas internas? – max
@max Sí, eso funcionaría. Y sí, los indicadores adicionales reducirían la velocidad un poco y consumirían un poco más de memoria. –