相关疑难解决方法(0)

如何制作一系列功能装饰器?

如何在Python中创建两个装饰器来执行以下操作?

@makebold
@makeitalic
def say():
   return "Hello"
Run Code Online (Sandbox Code Playgroud)

...应该返回:

"<b><i>Hello</i></b>"
Run Code Online (Sandbox Code Playgroud)

我不是试图HTML在一个真实的应用程序中这样做 - 只是试图了解装饰器和装饰器链是如何工作的.

python decorator python-decorators

2647
推荐指数
17
解决办法
49万
查看次数

什么是memoization以及如何在Python中使用它?

我刚开始使用Python,我不知道什么是memoization以及如何使用它.另外,我可以有一个简化的例子吗?

python memoization

356
推荐指数
9
解决办法
14万
查看次数

Python基于磁盘的字典

我正在运行一些动态编程代码(尝试暴力反驳Collat​​z猜想= P)并且我使用dict来存储我已经计算过的链的长度.显然,它在某些时候耗尽了内存.是否有任何简单的方法可以使用某些变体,dict当它用完房间时会将部分内容分页到磁盘上?显然它会比内存中的字典慢,并且最终可能会占用我的硬盘空间,但这可能适用于其他不那么无用的问题.

我意识到基于磁盘的字典几乎就是一个数据库,所以我使用sqlite3手动实现了一个,但是我并没有以任何智能的方式实现它并让它一次查找数据库中的每个元素...它慢了300倍.

是最聪明的方法来创建我自己的一组dicts,一次只保留一个内存,并以一种有效的方式将它们分页?

python database dictionary disk-based

40
推荐指数
4
解决办法
1万
查看次数

是否有为python建立的memoize on-disk装饰器?

我一直在寻找一个python模块,它提供了一个具有以下功能的memoize装饰器:

  • 将缓存存储在磁盘上以便在后续程序运行中重用.
  • 适用于任何可选择的参数,最重要的是numpy数组.
  • (Bonus)检查参数是否在函数调用中发生变异.

我发现了几个小的代码段用于这个任务,很可能实现一个自己,但我宁愿有一个既定的软件包这一任务.我也发现了incpy,但这似乎不适用于标准的python解释器.

理想情况下,我希望functools.lru_cache在磁盘上加上缓存存储.有人能指点我这个合适的套餐吗?

python decorator memoization

6
推荐指数
1
解决办法
1121
查看次数

使用Python将函数缓存到基于版本的到期磁盘

我想用以下规范缓存某些函数/方法的结果:

  • 运行之间有效:解释程序死后,运行之间的高速缓存应保持不变,这意味着数据需要保存到磁盘。
  • 基于函数版本的到期时间:只要函数未更改,缓存中的数据就应保持有效。如果功能更改,它将使数据无效。
  • 目前,所有这些都是单线程在同一台计算机上发生的。在同一台机器上支持并发是一个“奖励”。

我知道有一些基于磁盘的缓存的缓存装饰器,但是它们的到期时间通常是基于时间的,这与我的需求无关。

我考虑过使用Git commit SHA检测功能/类版本,但是问题是在同一文件中有多个功能/类。我需要一种方法来检查文件的特定功能/类段是否已更改。

我认为解决方案将包括版本管理和缓存的组合,但是我不太熟悉如何优雅地解决此问题。

例:

#file a.py
@cache_by_version
def f(a,b):
    #...

@cache_by_version
def g(a,b):
    #...

#file b.py
from a import *
def main():
    f(1,2)
Run Code Online (Sandbox Code Playgroud)

运行main文件b.py,一旦应导致的结果的缓存f与参数12磁盘。main再次运行应从缓存中获取结果,而无需f(1,2)再次评估。但是,如果f更改,则缓存应无效。另一方面,如果g更改,则不应影响的缓存f

python git caching python-2.7

5
推荐指数
1
解决办法
218
查看次数