2015-12-09 107 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

有很多方法。

您可以創建類的變量部分 - 不是對象的成員,而是類本身的成員。它在類定義時被初始化。

同樣,你可以在模塊的外層放置一個變量。它將屬於該模塊,並將在第一次導入模塊時進行初始化。

最後有一個定義對象作爲函數的默認參數的黑客攻擊。當函數被定義時,變量將被初始化,並且將屬於該函數。您只能使用參數名稱訪問它,並且可以由調用方覆蓋。