skbio.tree.TreeNode.cache_attr¶
- TreeNode.cache_attr(func, cache_attrname, cache_type=<class 'list'>)[源代码]¶
在树的内部节点上缓存属性
状态:从0.4.0开始实验。
- 参数:
func (function) -- 将为当前正在计算的节点提供func,并且必须从该节点返回要缓存的项列表或空列表。
cache_attrname (str) -- 要装饰的包含缓存值的属性的名称
cache_type ({set, frozenset, list}) -- 缓存的类型
备注
如果需要频繁查找通常需要遍历树的属性,则此方法特别有用。
警告:如果树的拓扑结构发生变化(例如,如果 TreeNode.invalidate_caches 被称为。
- 抛出:
TypeError -- 如果缓存类型不是 set 或A list 指定。
示例
将树的提示名称缓存到其内部节点上
>>> from skbio import TreeNode >>> tree = TreeNode.read(["((a,b,(c,d)e)f,(g,h)i)root;"]) >>> f = lambda n: [n.name] if n.is_tip() else [] >>> tree.cache_attr(f, 'tip_names') >>> for n in tree.traverse(include_self=True): ... print("Node name: %s, cache: %r" % (n.name, n.tip_names)) Node name: root, cache: ['a', 'b', 'c', 'd', 'g', 'h'] Node name: f, cache: ['a', 'b', 'c', 'd'] Node name: a, cache: ['a'] Node name: b, cache: ['b'] Node name: e, cache: ['c', 'd'] Node name: c, cache: ['c'] Node name: d, cache: ['d'] Node name: i, cache: ['g', 'h'] Node name: g, cache: ['g'] Node name: h, cache: ['h']