我有一组非常大且计算成本昂贵的数组,并且在任何给定的运行中我的代码都不一定需要这些数组.我想让他们的声明可选,但理想情况下无需重写我的整个代码.
现在的示例:
x = function_that_generates_huge_array_slowly(0)
y = function_that_generates_huge_array_slowly(1)
Run Code Online (Sandbox Code Playgroud)
我想做的例子:
x = lambda: function_that_generates_huge_array_slowly(0)
y = lambda: function_that_generates_huge_array_slowly(1)
z = x * 5 # this doesn't work because lambda is a function
# is there something that would make this line behave like
# z = x() * 5?
g = x * 6
Run Code Online (Sandbox Code Playgroud)
虽然如上所述使用lambda实现了所需的效果之一 - 数组的计算延迟到需要时 - 如果多次使用变量"x",则必须每次计算.我想只计算一次.
编辑:经过一些额外的搜索,看起来有可能做我想要的(大约)类中的"懒惰"属性(例如http://code.activestate.com/recipes/131495-lazy-attributes/) .我不认为没有单独的课程可以做任何类似的事情吗?
编辑2:我正在尝试实现一些解决方案,但我遇到了一个问题,因为我不明白它们之间的区别:
class sample(object):
def __init__(self):
class one(object):
def __get__(self, obj, type=None):
print "computing ..."
obj.one = 1
return …Run Code Online (Sandbox Code Playgroud) 假设您了解 Python 内置属性:http://docs.python.org/library/functions.html#property
我想以这种方式重新设置对象属性,但是,我需要在方法内部执行此操作,以便能够向其传递一些参数,目前 property() 的所有 Web 示例都在方法外部定义属性,并且尝试显而易见的...
def alpha(self, beta):
self.x = property(beta)
Run Code Online (Sandbox Code Playgroud)
...似乎不起作用,我很高兴如果您可以向我展示我的概念错误或其他替代解决方案,而无需对代码进行子类化(实际上我的代码已经过度子类化)或使用装饰器(这是我将使用的解决方案如果没有其他的话)。
谢谢。