题
有关该实施例中,我有一个字典,使得当我请它,“余烬攻击”被显示。
#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()
然而,当我开始使用的货架,而不是字典,我得到了一个空白,当我呼吁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()
唯一的区别是,我提出的dict1一个货架字典而不是常规字典。这可能与内存范围或事做。反正,有人可以帮我修改我的代码,以便它会与货架上工作?谢谢!
解决方案
dict1=shelve.open("shelve.dat", writeback=True)
还可以指定其中应改善性能的协议
dict1=shelve.open("shelve.dat", protocol=2, writeback=True)
因为Python语义的,搁架 可以不知道什么时候一个可变 持久字典条目是 改性。默认情况下,修改的对象 当分配到只写 架(参见实施例)。如果可选 回写参数设置为True, 访问的所有条目也被缓存 在存储器中,和写回上同步() 和close();这可以使它更加便利 突变的可变项 持续的字典,但是,如果许多 条目访问,它可以消耗 海量的内存缓存, 它可以使关闭操作 因为所有访问的条目很慢 写回(有没有办法 确定哪些访问的条目是 可变的,也没有哪一个实际上是 突变的)。
不隶属于 StackOverflow