Frage

Für dieses Beispiel habe ich einen Wörterbuch, dass, wenn ich auf ihn nennen, „Ember Attack“ angezeigt wird.

#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()

Allerdings, wenn ich mit Regalen beginnen anstelle des Wörterbuchs, erhalte ich eine leere, wenn ich auf var1 nennen.

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()

Der einzige Unterschied ist, dass ich gemacht dict1 ein shelve Wörterbuch anstelle eines normalen Wörterbuch. Es hat wahrscheinlich mit Speicherumfang oder etwas zu tun. Wie auch immer, kann mir jemand helfen meinen Code überarbeiten, so dass es mit Regalen funktionieren wird? Dank!

War es hilfreich?

Lösung

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

Sie können auch das Protokoll angeben, die die Leistung verbessern sollten

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

Aufgrund der Python Semantik, ein Regal   kann nicht wissen, ein veränderliches, wenn   persistent-Wörterbucheintrag ist   geändert. Standardmäßig geänderten Objekte   nur die, wenn zugeordnet sind, geschrieben   Regal (siehe Beispiel). Wenn die optionale   Writeback-Parameter auf True gesetzt ist,   Alle Einträge zugegriffen werden ebenfalls zwischengespeichert   im Speicher und auf sync zurück geschrieben ()   und close (); Dies kann es handlicher   mutieren wandelbar Einträge in der   Wörterbuch persistent, aber wenn viele   Einträge zugegriffen werden, kann es verbrauchen   große Mengen an Speicher für den Cache,   und es kann die Schließungsoperation machen   sehr langsam, da alle Einträge zugegriffen   zurückgeschrieben werden (es gibt keine Möglichkeit,   bestimmen, welche Einträge zugegriffen   wandelbar, noch welche davon waren tatsächlich   mutiert).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top