2017-03-06 67 views
0

我想写一个持久化备忘录(记忆到磁盘)的装饰器。因为我想为许多函数使用这个装饰器,所以我必须决定为这些函数保存记忆数据的位置。我用Google搜索了一圈,发现两种解决方案:python持久化备忘录的目标

  1. 让功能决定在哪里通过函数名存储memoizing数据
  2. 自动确定在何处存储数据

然而,这两种解决方案,每个功能都必须在名称(或目的地)碰撞的情况下“互相”知道,这是一种不好的设计。

因此,我的问题是,如何避免这种碰撞?

+2

必须解决类似问题的[pickle module](https://docs.python.org/3/library/pickle.html)使用酸洗功能的“完全限定名称”。 –

+0

有趣的问题,但我没有答案。不过,我有几条评论。 :) 1.您装饰的功能不应该知道它们是装饰的,所以它们不应包含与memoization目的地相关的代码或数据。 OTOH,你的装饰器可以根据'__file__'和函数的'.__ name__'选择一个默认目的地,但也可以接受一个参数来选择不同的目标路径,或者修改默认目标路径。 2.注意确保您的程序可以处理多次同时运行。 –

回答

1

将其保存在与__file__相邻的位置,该位置是模块从中加载的路径。我相信在某些情况下,它可能是一个相对路径,因此您可能希望将备忘录直接存储在该路径中,或将其转变为绝对路径或其他内容。