python:反正只有一次初始化一个变量?

时间:2015-12-09 02:02:27

标签: python python-2.7

我想将我的时间序列数据与给定文件中的元数据进行匹配。

在我的代码中,主函数调用" create_match()"每1分钟一次。在" create_match()中,有一个" list_from_file()"函数从文件读取数据并存储在列表中以执行匹配。

问题是我的代码每1分钟无效,它会读取文件并在同一列表中重写。我想只读一次文件(只初始化列表一次),然后忽略" list_from_file()"功能。我不想将此任务移动到main函数并通过函数传递列表。

python在c编程中是否有像静态变量这样的特殊变量?

3 个答案:

答案 0 :(得分:3)

Python没有静态变量声明;但是,python中有几个相当标准的编程模式可以做类似的事情。最简单的方法是使用全局变量。

全局变量

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

CACHE = None

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

答案 1 :(得分:1)

有很多方法。

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

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

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

答案 2 :(得分: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)