significa que propias procedimientos none lista guardar funciones explicacion comando python google-app-engine memcached

propias - que significa none en python



¿Qué pasa si quiero almacenar un valor None en el Memcache? (3)

Realmente no.

Puede almacenar un valor Ninguno como una cadena vacía, pero realmente no hay una manera de almacenar datos especiales en una Memcache.

¿Cuál es la diferencia entre la clave de caché que no existe y el valor de caché que no es? Probablemente sea mejor unificar estas dos situaciones.

Esto está específicamente relacionado con la API de Memcache de Google App Engine, pero estoy seguro de que también se aplica a otras herramientas de Memcache.

El método de diccionario .get () le permite especificar un valor predeterminado, como dict.get (''key'', ''defaultval'')

Esto puede ser útil si es posible que desee almacenar None como un valor en un diccionario.

Sin embargo, el memcache.get () no te permite hacer esto. Modifiqué mi decorador @memoize para que se vea así:

def memoize(keyformat, time=1000000): """Decorator to memoize functions using memcache.""" def decorator(fxn): def wrapper(*args, **kwargs): key = keyformat + str(args[1:]) + str(kwargs) from google.appengine.api import memcache data = memcache.get(key) if Debug(): return fxn(*args, **kwargs) if data: if data is ''None'': data = None return data data = fxn(*args, **kwargs) if data is None: data = ''None'' memcache.set(key, data, time) return data return wrapper return decorator

Ahora estoy seguro de que hay un buen argumento de que no debería almacenar ninguno de los valores en primer lugar, pero dejemos eso de lado por el momento. ¿Hay una mejor manera de manejar esto además de convertir None vals a strings y viceversa?


Podría hacer algo como lo que hace Haskell y Scala y almacenar un diccionario de opciones. El diccionario contiene dos claves: una clave para indicar que es válida y una clave que se utiliza para contener los datos. Algo como esto:

{valid: true, data: whatyouwanttostore}

Entonces, si get Ninguno, sabrá que se perdió la memoria caché; si el resultado es un diccionario con Ninguno como datos, usted sabe que los datos estaban en la caché pero que era falso.


Una posible forma de hacerlo es crear una nueva clase que defina None para este propósito y asignar instancias de esto al caché (desafortunadamente no se puede extender None ). Alternativamente, podría usar la cadena vacía "", o evitar almacenar ninguno / valores nulos por completo (la ausencia de la clave implica Ninguno).

Luego, verifique las instancias de su clase ''Ninguno'' cuando verifique el resultado de mc.get(key) ( is None , == "" , etc.)