首页 > 解决方案 > 如何创建不是属性/属性的惰性变量?

问题描述

在这一点上,我已经找到了几个用于延迟评估属性/属性(也称为缓存方法)的 python 实现,包括:

还有很多。它们都有简短的实现,可以用作类方法的装饰器。但是,它们也有相同的限制:它们不能用于类之外的函数。

这是一个例子:

from torch.distributions.utils import lazy_property

@lazy_property
def lazyFn():
    return 3

v = lazyFn

type(v)

这个简短的程序将产生结果:

<torch.distributions.utils.lazy_property at ...

而不是正确的3

由于python没有包对象(或单例对象)的概念,这使得惰性求值的使用受到严重限制。我想知道是否有一个同样简单的实现可以支持这一点,或者由于引擎限制是不可能的?

更新:我也在寻找一个 python 中的实现,它可以支持类之外的@property 的类似用例,但无济于事。用例很重要,因为一些大规模的代码重构需要我在函数和变量之间进行选择而不影响其接口签名。(或者更简单地说:我想在不使用括号的情况下调用函数)

我目前正在使用 Python 3.8。

标签: pythonpython-3.xlazy-evaluationpython-3.8

解决方案


推荐阅读