python - 如何创建不是属性/属性的惰性变量?
问题描述
在这一点上,我已经找到了几个用于延迟评估属性/属性(也称为缓存方法)的 python 实现,包括:
torch 库中的一个实用程序类:torch.distributions.utils import lazy_property
还有很多。它们都有简短的实现,可以用作类方法的装饰器。但是,它们也有相同的限制:它们不能用于类之外的函数。
这是一个例子:
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。
解决方案
推荐阅读
- html - 中心容器和 Z 指数
- python - 更新 Django 对象的字段
- node.js - nodejs中的asn1.Class.UNIVERSAL TypeError
- android - 在Android中关闭应用程序时如何从setResult获取数据
- mysql - 使用 Laravel/Eloquent 为 Yajra DataTables 编写连接查询的慢速 MySQL
- javascript - 嵌套地图不返回
- c++ - 在 Windows 上的 Qt Creator 中链接库后尝试构建时出现“未定义的引用”错误
- opentok - 如何在opentok的广播中添加自定义视频
- python - 在列表列表中查找最大值的坐标
- node.js - 构建.exe后电子托盘和自动启动功能不起作用