gpt4 book ai didi

python - 惰性评估是如何实现的(例如在 ORM 中)

转载 作者:行者123 更新时间:2023-11-28 19:35:55 25 4
gpt4 key购买 nike

我很想知道惰性求值是如何在更高层次上实现的,即在库中等等。例如,Django ORM 或 ActiveRecord 如何将查询的求值延迟到实际使用时?

最佳答案

让我们看一下django的django.db.models.query.QuerySet的一些方法类:

class QuerySet(object):
"""
Represents a lazy database lookup for a set of objects.
"""
def __init__(self, model=None, query=None, using=None):
...
self._result_cache = None
...

def __len__(self):
if self._result_cache is None:
...
elif self._iter:
...
return len(self._result_cache)

def __iter__(self):
if self._result_cache is None:
...
if self._iter:
...
return iter(self._result_cache)

def __nonzero__(self):
if self._result_cache is not None:
...

def __contains__(self, val):
if self._result_cache is not None:
...
else:
...
...

def __getitem__(self, k):
...
if self._result_cache is not None:
...
...

这些方法遵循的模式是,在调用真正需要返回某些结果的方法之前,不会执行任何查询。届时,结果将存储在 self._result_cache 中,对同一方法的任何后续调用都会返回缓存的值。

关于python - 惰性评估是如何实现的(例如在 ORM 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8976103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com