0

对于这个例子,我有一个字典,当我调用它时,会显示“Ember Attack”。

#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 做成了一个搁置的字典,而不是一个普通的字典。它可能与内存范围或其他东西有关。无论如何,有人可以帮我修改我的代码,使其适用于书架吗?谢谢!

4

1 回答 1

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

您还可以指定应该提高性能的协议

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

由于 Python 语义,架子无法知道何时修改了可变的持久字典条目。默认情况下,修改的对象仅在分配到架子时才写入(参见示例)。如果可选的 writeback 参数设置为 True,则所有访问的条目也会缓存在内存中,并在 sync() 和 close() 上写回;这可以更方便地改变持久字典中的可变条目,但是,如果访问了许多条目,它会消耗大量内存用于缓存,并且由于所有访问的条目都被写回,它会使关闭操作非常慢(无法确定哪些访问的条目是可变的,也无法确定哪些条目实际上是突变的)。

于 2010-08-04T22:54:14.033 回答