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']