我需要在阅读庞大的文件后填写字典。我创建了一个读取文件并填充此字典的方法。在每次迭代中都会调用此方法,这会降低性能。无论如何,我可以通过它将这个字典声明为静态,并且它在应用程序的整个生命周期内都会保留。
我尝试用下面的代码模拟这个(使用非本地),但没有帮助。每次迭代都会读取该文件。
def read_data_from_file( path ):
file_name = path + '.dat'
common_array_dict = dict()
def get_the_dict():
try:
common_array_list = list()
nonlocal common_array_dict
if common_array_dict :
return common_array_dict
with open(file_name, 'rb') as file:
new_list = pickle.load(file)
print("Reading file")
for do_operations here:
<stat1>
<stat2>
except IOError:
print("Output file doesn't exist! Continuing..")
return
return get_the_dict
任何建议都会有所帮助:)
答案 0 :(得分:1)
最简单的方法是查找一些memoization装饰器,例如来自here,并相应地修饰函数,然后在代码中正常使用它。每个文件只应读取一次,结果将存储在缓存中供以后使用。
@memoize
def read_data_from_file( path ):
...
或者,只需将该函数的结果绑定到某个(可能是全局的)变量并使用该变量,而不是再次调用该函数。无需在函数本身内使用全局。
data = read_data_from_file("the/path/to/the/file")
....
do_stuff_with(data) # use result from function
...
do_more_stuff(data) # don't call read_data_from_file again