- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我使用了一个内存装饰器:
class memoize:
def __init__(self, fn):
self.fn = fn
self.memo = {}
if os.path.isfile(filename):
self.memo = pickle.load( open( filename, "rb" ) )
else:
self.memo = {}
def __call__(self, *args, **kwds):
str = pickle.dumps(args, 1) + pickle.dumps(kwds, 1)
if not self.memo.has_key(str):
self.memo[str] = self.fn(*args, **kwds)
return self.memo[str]
然后我在我想要应用它的函数上使用@memoize。
但是我会在完成后尝试将缓存保存到内存中。
pickle.dump( memoize.memo, open(filename, "wb" ) )
不工作。我该如何解决? “AttributeError:类 memoize 没有属性‘memo’”
最佳答案
您需要创建一个实例,它是实例属性而不是类属性:
pickle.dump( memoize(func).memo...
如果你想从使用装饰器的函数访问备忘录:
@memoize
def fib(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
return fib(n-1) + fib(n-2)
fib(30)
print(fib.memo)
{'(K\x0btq\x00.}q\x00.': 89, '(K\x06tq\x00.}q\x00.': 8, '(K\ntq\x00.}q\x00.': 55, '(K\x18tq\x00.}q\x00.': 46368, '(K\x1ctq\x00.}q\x00.': 317811, '(K\x15tq\x00.}q\x00.': 10946, '(K\x10tq\x00.}q\x00.': 987, '(K\x19tq\x00.}q\x00.': 75025, '(K\x13tq\x00.}q\x00.': 4181, '(K\x11tq\x00.}q\x00.': 1597, '(K\x12tq\x00.}q\x00.': 2584, '(K\x00tq\x00.}q\x00.': 0, '(K\ttq\x00.}q\x00.': 34, '(K\x04tq\x00.}q\x00.': 3, '(K\x1etq\x00.}q\x00.': 832040, '(K\x16tq\x00.}q\x00.': 17711, '(K\x0ftq\x00.}q\x00.': 610, '(K\x0etq\x00.}q\x00.': 377, '(K\x07tq\x00.}q\x00.': 13, '(K\x14tq\x00.}q\x00.': 6765, '(K\x08tq\x00.}q\x00.': 21, '(K\x0ctq\x00.}q\x00.': 144, '(K\x05tq\x00.}q\x00.': 5, '(K\x1dtq\x00.}q\x00.': 514229, '(K\x03tq\x00.}q\x00.': 2, '(K\x01tq\x00.}q\x00.': 1, '(K\x17tq\x00.}q\x00.': 28657, '(K\x02tq\x00.}q\x00.': 1, '(K\x1btq\x00.}q\x00.': 196418, '(K\x1atq\x00.}q\x00.': 121393, '(K\rtq\x00.}q\x00.': 2}
为了清楚起见,每次装饰函数时都会创建一个新的备忘录字典,因此您无法访问备忘录的全局版本,因为没有。
如果你想从类中访问它并在所有函数之间共享它,你可以将它设为类属性:
class memoize:
memo = {}
def __init__(self, fn):
self.fn = fn
if os.path.isfile(""):
memoize.memo = pickle.load( open( filename, "rb" ) )
else:
memoize.memo = {}
def __call__(self, *args, **kwds):
str = pickle.dumps(args, 1) + pickle.dumps(kwds, 1)
if not self.memo.has_key(str):
memoize.memo[str] = self.fn(*args, **kwds)
return memoize.memo[str]
fib(100)
fib(1)
print(memoize.memo)
{'(K,tq\x00.}q\x00.': 701408733, '(K\x0btq\x00.}q\x00.': 89, '(K?tq\x00.}q\x00.': 6557470319842, '(K=tq\x00.}q\x00.': 2504730781961, '(K"tq\x00.}q\x00.': 5702887, '(K\x10tq\x00.}q\x00.': 987, '(K;tq\x00.}q\x00.': 956722026041, '(K\x11tq\x00.}q\x00.': 1597, '(K\x00tq\x00.}q\x00.': 0, '(K\x1etq\x00.}q\x00.': 832040, '(KBtq\x00.}q\x00.': 27777890035288, '(K0tq\x00.}q\x00.': 4807526976, '(K\x0ftq\x00.}q\x00.': 610, '(K\x0etq\x00.}q\x00.': 377, '(Kctq\x00.}q\x00.': 218922995834555169026L, '(K6tq\x00.}q\x00.': 86267571272, '(KYtq\x00.}q\x00.': 1779979416004714189, '(K.tq\x00.}q\x00.': 1836311903, '(K\x02tq\x00.}q\x00.': 1, '(KGtq\x00.}q\x00.': 308061521170129, '(K%tq\x00.}q\x00.': 24157817, '(Kdtq\x00.}q\x00.': 354224848179261915075L, '(K\x19tq\x00.}q\x00.': 75025, '(K:tq\x00.}q\x00.': 591286729879, '(K\x13tq\x00.}q\x00.': 4181, '(K&tq\x00.}q\x00.': 39088169, '(K\ttq\x00.}q\x00.': 34, '(K*tq\x00.}q\x00.': 267914296, '(K]tq\x00.}q\x00.': 12200160415121876738L, '(KCtq\x00.}q\x00.': 44945570212853, '(KWtq\x00.}q\x00.': 679891637638612258, '(K5tq\x00.}q\x00.': 53316291173, '(K\x16tq\x00.}q\x00.': 17711, '(K9tq\x00.}q\x00.': 365435296162, '(KMtq\x00.}q\x00.': 5527939700884757, '(K3tq\x00.}q\x00.': 20365011074, '(K\x07tq\x00.}q\x00.': 13, '(K$tq\x00.}q\x00.': 14930352, '(K\\tq\x00.}q\x00.': 7540113804746346429, '(KQtq\x00.}q\x00.': 37889062373143906, "(K'tq\x00.}q\x00.": 63245986, '(KRtq\x00.}q\x00.': 61305790721611591, '(KDtq\x00.}q\x00.': 72723460248141, '(K\x1dtq\x00.}q\x00.': 514229, '(KNtq\x00.}q\x00.': 8944394323791464, '(K`tq\x00.}q\x00.': 51680708854858323072L, '(K!tq\x00.}q\x00.': 3524578, '(K\x1ctq\x00.}q\x00.': 317811, '(K-tq\x00.}q\x00.': 1134903170, '(KLtq\x00.}q\x00.': 3416454622906707, '(K\x12tq\x00.}q\x00.': 2584, '(K\x04tq\x00.}q\x00.': 3, '(K_tq\x00.}q\x00.': 31940434634990099905L, '(K8tq\x00.}q\x00.': 225851433717, '(K<tq\x00.}q\x00.': 1548008755920, '(K[tq\x00.}q\x00.': 4660046610375530309, '(KZtq\x00.}q\x00.': 2880067194370816120, '(K2tq\x00.}q\x00.': 12586269025, '(K tq\x00.}q\x00.': 2178309, '(KFtq\x00.}q\x00.': 190392490709135, '(KJtq\x00.}q\x00.': 1304969544928657, '(KXtq\x00.}q\x00.': 1100087778366101931, '(K>tq\x00.}q\x00.': 4052739537881, '(KUtq\x00.}q\x00.': 259695496911122585, '(K/tq\x00.}q\x00.': 2971215073, '(KStq\x00.}q\x00.': 99194853094755497, '(K\x0ctq\x00.}q\x00.': 144, '(KItq\x00.}q\x00.': 806515533049393, '(K\x1ftq\x00.}q\x00.': 1346269, '(K\x1btq\x00.}q\x00.': 196418, '(KVtq\x00.}q\x00.': 420196140727489673, '(K\x1atq\x00.}q\x00.': 121393, '(K\x06tq\x00.}q\x00.': 8, '(K\ntq\x00.}q\x00.': 55, '(K\x18tq\x00.}q\x00.': 46368, '(K#tq\x00.}q\x00.': 9227465, '(K7tq\x00.}q\x00.': 139583862445, '(K\x15tq\x00.}q\x00.': 10946, '(KTtq\x00.}q\x00.': 160500643816367088, '(KHtq\x00.}q\x00.': 498454011879264, '(KEtq\x00.}q\x00.': 117669030460994, '(K+tq\x00.}q\x00.': 433494437, '(KAtq\x00.}q\x00.': 17167680177565, '(K1tq\x00.}q\x00.': 7778742049, '(KKtq\x00.}q\x00.': 2111485077978050, '(K)tq\x00.}q\x00.': 165580141, '(Katq\x00.}q\x00.': 83621143489848422977L, '(Kbtq\x00.}q\x00.': 135301852344706746049L, '(KPtq\x00.}q\x00.': 23416728348467685, '(K\x14tq\x00.}q\x00.': 6765, '(K\x08tq\x00.}q\x00.': 21, '(K\x05tq\x00.}q\x00.': 5, '(K@tq\x00.}q\x00.': 10610209857723, '(K\x03tq\x00.}q\x00.': 2, '(K^tq\x00.}q\x00.': 19740274219868223167L, '(K\x01tq\x00.}q\x00.': 1, '(K\x17tq\x00.}q\x00.': 28657, '(K4tq\x00.}q\x00.': 32951280099, '(KOtq\x00.}q\x00.': 14472334024676221, '(K\rtq\x00.}q\x00.': 233, '(K(tq\x00.}q\x00.': 102334155}
关于python - 将 memoization 装饰器缓存转储到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30293350/
我有这些 ViewModel:RecordViewModel、ComponentViewModel,其中 RecordViewModel 本质上是几个 ComponentViewModel 的容器。
我正在尝试为我的 Controller 设置一个装饰器。我的目的是在我的应用程序中的所有 Controller 中引入一些常见的行为。 我已将其配置为在 Angular 1.2.x 中工作,但从 1.
我想用角上的时间戳装饰我生成的所有 JFreeCharts。 JFreeChart 框架中是否有一种方法可以在生成图表后在图像上绘制? 编辑:请注意,这些图表是在后台线程中生成并通过 servlet
在grails应用程序中,我想用自定义数据装饰每个日志。当前的需要只是在日志消息前添加当前用户名 我对如何解决此问题有一些想法: -Adding custom field to log4j patte
我有一个form-el,它只是一个容器,必须将所有子元素包装在具有特定类的div 中。我希望允许 from-el 来包装它们,而不是在每个表单元素中重复这个 div 。我可以循环所有元素并将它们包装在
我遵循以下约定来装饰 Python 类中的某些方法。我想知道是否有一些更好的方法可以做到同样的事情。我的方法看起来当然不太好;对原始成员函数的调用看起来一点也不直观。 from threading i
我的 DTO 看起来像这样 public class SomeDTO { public string last_name{ get; set; } public string ac
这可能是一个远景,但 .NET 的灵 active 一直让我惊叹不已,所以开始吧。 我正在开发一个 MVC 应用程序,它需要在一组程序集中搜索派生自公共(public)基类的类类型。 即我有几个程序集
在我正在进行的项目中,我正在按照项目负责人的要求实现开发人员通知系统。它的工作方式是,如果发生前端错误,开发团队会收到一封错误电子邮件。 但是,在我当前的实现中,我似乎有以下循环依赖: $rootSc
我需要一些关于如何取消装饰和装饰 JInternalFrame 的帮助。我的框架类是这样的: package com; import java.awt.BorderLayout; import jav
假设我们有可能需要长时间运行的任务: public class LongRunningTask { public ReturnType doSomething() { ...
我正在尝试创建一个装饰器方法,它将一些默认的生命周期方法添加到 react 组件中。我的目标是向组件中添加一些默认功能,例如,所有组件都应该能够在 componentWillMount 上执行特定操作
我正在尝试将 DBUS 的异步方法调用与 Twisted 的 Deferred 相结合,但我在调整常用的 DBUS 服务方法装饰器来执行此操作时遇到了麻烦。 要使用 DBUS 异步回调方法,您需要:
是否可以设置表格中一行的背景颜色?当条件适用时,我需要突出显示一行。效果为 ...我可以在其中指定“字体”属性。 (我需要突出显示整行)。 最佳答案 您必须子类化 qooxdoo 默认行渲染器才能做到
我正在开发一个具有不同视角的基于 Java Swing 的应用程序。对于“主菜单”视角,我不希望装饰窗口 (JFrame),而在其他视角中,我确实希望装饰窗口。换句话说,我需要动态更 retrofit
我想做一些类似下面代码所示的事情: class foo { private: std::fstream* m_stream; public: foo(std::fstream* str
我的数据源提供了一个 ObservableList ,但是对于我的 ListView,我需要一个 ObservableList . A Warning基本上只是字符串的装饰器,添加一个 boolean
我一直在纠结于装饰+接口(interface)。假设我有以下“行为”接口(interface): interface IFlyable { void Fly();} interface ISwimma
有没有人为 iOS 6 UICollectionView 实现过装饰 View ?不可能 查找有关在网络上实现装饰 View 的任何教程。基本上在我的应用程序中,我有多个部分,我只想在每个部分后面显示
我有一个简单的 Controller ,例如: function MyController($scope, $http) { ... $http.post(url).success(f
我是一名优秀的程序员,十分优秀!