相关疑难解决方法(0)

python懒惰变量?或者,延迟了昂贵的计算

我有一组非常大且计算成本昂贵的数组,并且在任何给定的运行中我的代码都不一定需要这些数组.我想让他们的声明可选,但理想情况下无需重写我的整个代码.

现在的示例:

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 numpy

13
推荐指数
3
解决办法
5952
查看次数

在方法中使用 Python property()

假设您了解 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)

...似乎不起作用,我很高兴如果您可以向我展示我的概念错误或其他替代解决方案,而无需对代码进行子类化(实际上我的代码已经过度子类化)或使用装饰器(这是我将使用的解决方案如果没有其他的话)。

谢谢。

python properties decorator

3
推荐指数
1
解决办法
2354
查看次数

标签 统计

python ×2

decorator ×1

numpy ×1

properties ×1