Question

Pour cet exemple, j'ai un dictionnaire, que quand je l'appelle là-dessus, « Ember Attack » est affiché.

#import shelve
class Pokemon():
"""Each pokemon's attributes"""

def __init__(self):
    self.id=[]
    self.var1=[]
    self.var2=[]
    self.var3=[]
    self.var4=[]
    self.var5=[]

def __str__(self):
     showList=['id','var1', 'var2', 'var3', 'var4', 'var5']

#dict1=shelve.open("shelve.dat")
dict1={}
dict1["Charmander"]=Pokemon()
dict1["Charmander"].var1="Ember Attack"
#dict1.sync()
print dict1["Charmander"].var1
#dict1.close()

Cependant, quand je commencer à utiliser les tablettes à la place du dictionnaire, je reçois un blanc quand je demande à var1.

import shelve

class Pokemon():
"""Each patient's attributes"""

def __init__(self):
    self.id=[]
    self.var1=[]
    self.var2=[]
    self.var3=[]
    self.var4=[]
    self.var5=[]

def __str__(self):
    showList=['id','var1', 'var2', 'var3', 'var4', 'var5']

dict1=shelve.open("shelve.dat")
#dict1={}

dict1["Charmander"]=Pokemon()
dict1["Charmander"].var1="Ember Attack"

dict1.sync()

print dict1["Charmander"].var1

dict1.close()

La seule différence est que je fait Dict1 un dictionnaire shelve au lieu d'un dictionnaire régulier. Il a sans doute à voir avec la portée de la mémoire ou quelque chose. Quoi qu'il en soit, quelqu'un peut me aider mon code pour réviser qu'il fonctionnera avec des étagères? Merci!

Était-ce utile?

La solution

dict1=shelve.open("shelve.dat", writeback=True)

vous pouvez également spécifier le protocole qui devrait améliorer les performances

dict1=shelve.open("shelve.dat", protocol=2, writeback=True)
  

En raison de la sémantique python, une étagère   ne peut pas savoir quand un mutable   entrée persistante-dictionnaire est   modifié. Par des objets modifiés par défaut   sont écrites uniquement lorsqu'ils sont affectés à la   étagère (voir l'exemple). Si l'option   paramètre writeback est définie sur True,   toutes les entrées accessibles sont également mises en cache   dans la mémoire, et écrit avant la synchronisation ()   et close (); cela peut le rendre plus pratique   à muter entrées mutables dans la   dictionnaire persistant, mais, si beaucoup   les entrées sont accessibles, il peut consommer   de grandes quantités de mémoire pour le cache,   et il peut faire l'opération de fermeture   très lent depuis toutes les entrées accessibles   sont réintégrées (il n'y a aucun moyen de   déterminer les entrées sont accessibles   mutables, ni ceux qui étaient en fait   mutée).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top