2015-12-09 137 views
0

我想将我的时间序列数据与给定文件的元数据进行匹配。python:无论如何只有一次初始化变量?

在我的代码中,主函数每1分钟调用一次“create_match()”函数。里面“create_match(),有一个”list_from_file()“函数从文件读取数据和存储在列表中进行匹配。

问题是我的代码不是有效的,因为每隔1分钟它就读取文件并重写在同一个列表中,我只想读一次文件(只初始化列表一次),然后忽略“list_from_file()”函数,我不想只将这个任务移动到主函数并传递。通过函数列表

确实蟒蛇有一个像静态变量的特殊变量在C编程

+0

你在'主函数调用之前创建的变量()',并把它在作为一个参数。你没有提供任何代码,所以我没有提供任何代码。 –

+1

显示您的代码。这比长时间的解释要好得多。 –

回答

1

你可以使用一个类:

class Match (object): 
    def __init__(self): 
     self.data = list_from_file() 
    def create_match(self): 
     # do something with `self.data` here 

做一个实例:

match = Match() 

这就要求list_from_file()。现在

,你可以访问调用create_match()反复self.data

import time 
for x in range(10): 
    match.create_match() 
    time.sleep(60) 
1

Python没有一个静态变量声明;然而,有几个比较规范的程序控制在python中使用模式来做类似的事情。最简单的方法是使用全局变量。

全局变量

定义一个全局变量和运行初始化函数之前检查它。如果全局变量已经被设置(即你正在阅读的列表),只需返回它们。

CACHE = None 

def function(): 
    global CACHE 
    if CACHE is None: 
     CACHE = initialize_function() 
    return CACHE 
0

有很多方法。

您可以创建类的变量部分 - 不是对象的成员,而是类本身的成员。它在类定义时被初始化。

同样,你可以在模块的外层放置一个变量。它将属于该模块,并将在第一次导入模块时进行初始化。

最后有一个定义对象作为函数的默认参数的黑客攻击。当函数被定义时,变量将被初始化,并且将属于该函数。您只能使用参数名称访问它,并且可以由调用方覆盖。