有没有一种方法可以在Python中构造懒惰序列



有一个Django视图,它使用特定的筛选器从数据库加载Member对象。

现在,我需要将此逻辑更改为首先呈现一个特定的Member,并让其余部分按其自然顺序

最简单的方法是立即执行查询,获取列表,从一开始移除并插入项。然而,我最好奇的是是否还有办法利用QuerySet的懒惰本性

在C#中,我会写:

IEnumerable<Member> members = db.Members; // db.Members is lazy
members = Enumerable.Union( // construct a lazy sequence that traverses its arguments
    new [] { specificMember },
    members.Where(m => m != specificMember)
);

由于循环将通过members,它将首先获得specificMember,然后使用原始db.Members使用的任何延迟加载逻辑

在Django和Python中有没有同样的方法?

使用itertools.chain。类似于:

import itertools
original_members = .... # get an iterator of the data
members = itertools.chain([specific_member], original_members)

chain函数返回一个迭代器。迭代器首先返回第一个参数中序列的值,该参数是包含specific_member的单个元素列表。然后它开始返回original_members的值,我认为这是一个惰性序列。

相关内容

  • 没有找到相关文章

最新更新