我有一个程序,在一个列表上循环,然后在列表上执行一个函数。从函数返回的结果是不同的,这取决于我是否循环了多个观察值而不是一个观察值。例如,当我把第10个观察值单独放进去时,我得到一个结果,但是当我把9和10放进去,再循环一遍,我得到10的不同答案。我唯一能想到的是,在存储中有一些变量是在9上执行函数时留下的,这导致了10的一些不同。下面是循环的代码:
for i, k in enumerate(Compobs):
print i+1, ' of ', len(Compobs)
print Compobs[i]
Compobs[i] = Filing(k[0],k[1])
Compobs
就是这样一个列表:
[['355300', '19990531'],[...],...]
函数Filing
来自我导入的另一个.py文件。它定义了一个新类Filing()
,并对每个观测值执行一系列函数,最终返回一些输出。我对python还比较陌生,所以我在这里有点不知所措。我可以发布归档.py代码,但超过1000行代码。你知道吗
这是归档类和初始化。你知道吗
class Filing(object):
cik =''
datadate=''
potentialpaths=[]
potential_files=[]
filingPath =''
filingType=''
reportPeriod=''
filingText=''
current_folder=''
compData=pd.Series()
potentialtablenumbers=[]
tables=[]
statementOfCashFlows=''
parsedstatementOfCashFlows=[]
denomination=''
cashFlowDictionary ={}
CFdataDictionary=OrderedDict()
CFsectionindex=pd.Series()
cfDataSeries=pd.Series()
cfMapping=pd.DataFrame()
compCFSeries=pd.Series()
cftablenumber=''
CompleteCF=pd.DataFrame()
def __init__(self,cik,datadate):
self.cik=cik
self.datadate=datadate
self.pydate=date(int(datadate[0:4]),int(datadate[4:6]),int(datadate[6:8]))
self.findpathstofiling()
self.selectfiling()
self.extractFilingType()
self.extractFilingText()
self.getCompData()
self.findPotentialStatementOfCashFlows()
self.findStatementOfCashFlows()
self.cleanUpCashFlowTable()
self.createCashFlowDictionary()
self.extractCFdataDictionary()
self.createCFdataSeries()
self.identifySections()
self.createMapping()
self.findOthers()
不是所有的变量归档.py每次调用时都要清除内存吗?有什么我不知道的吗?你知道吗
在
Filing
的顶层定义的所有列表、dict和其他对象只有一个副本。即使您显式地将它们分配给实例,该副本也是共享的(如果您没有显式地分配它们,则它们是继承的)。关键是,如果在一个实例中修改它们,那么在所有实例中都会修改它们。你知道吗如果您希望每个实例都有自己的副本,那么就完全去掉顶层分配,而是在
__init__
中分配对象的新实例。你知道吗换句话说,不要这样做:
相反,请执行以下操作:
然后每个实例都有自己的
x
的非共享副本。你知道吗您将类数据成员定义为类属性,而不是对象属性。它们就像C++或java类的静态数据成员。你知道吗
要解决这个问题,您不需要在
__init__
方法之上定义它们,而是在__init__
方法中定义它们。例如在上面
__init__
你应该有:在
__init__
相关问题 更多 >
编程相关推荐