python中字典的静态行为

时间:2017-01-30 09:58:07

标签: python dictionary

我需要在阅读庞大的文件后填写字典。我创建了一个读取文件并填充此字典的方法。在每次迭代中都会调用此方法,这会降低性能。无论如何,我可以通过它将这个字典声明为静态,并且它在应用程序的整个生命周期内都会保留。

我尝试用下面的代码模拟这个(使用非本地),但没有帮助。每次迭代都会读取该文件。

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

任何建议都会有所帮助:)

1 个答案:

答案 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