我有一个简单的GUI数据模型类。在这个类中,我有一个addPnt方法,如果没有通过关键字参数“timeDict”传递时间戳,它会附加一个时间戳。我希望在每次调用addPnt时,默认值({})都设置为timeDict。但是,在调试时,timeDict会保留对addPnt的初始调用中的值?!?!参见下面的代码
class LastTSDict(dict):
def __getitem__( self, name ):
try:
return super( LastTSDict, self ).__getitem__( name )
except KeyError:
self.__setitem__(name,timestamp.getTimestamp())
return self.__getitem__( name )
class DataElementDict(dict):
def __init__(self,maxLen):
self.maxLen=maxLen
self.lastTS=LastTSDict()
def __getitem__( self, name ):
try:
return super( DataElementDict, self ).__getitem__( name )
except KeyError:
if name==0:
self.__setitem__(name,defaultdict(partial(defaultdict,partial(deque, maxlen=self.maxLen))))
else:
self.__setitem__(name,defaultdict(partial(defaultdict,partial(deque, maxlen=self.maxLen/8))))
return self.__getitem__( name )
class Model(object):
def __init__(self,maxLen=8192,extPeriods=[5,60,300,900,3600,86400]):
self.DATA=DataElementDict(maxLen)
self.extPeriods=extPeriods
def addPnt(self,key,value,timeDict={}):
try:
pdb.set_trace()
if 'ts' not in timeDict.keys():
timeDict['ts']=timestamp.getTimestamp()
if 'tu' not in timeDict.keys():
timeDict['tu']=timestamp.unixTime(timeDict['ts'])
self.DATA[0][key]['v'].append(value)
for keyt in timeDict.keys():
self.DATA[0][key][keyt].append(timeDict[keyt])
这是怎么回事
默认参数的值仅在函数定义时创建一次
这意味着每个调用都使用相同的dictionary对象。每次通话都不是新的
要解决此问题,请执行以下操作:
相关问题 更多 >
编程相关推荐