查看numba示例中的堆栈代码:https://github.com/numba/numba/blob/master/examples/stack.py Stack类看起来像是独立于堆栈的元素类型编写的,但是最终的堆栈被实例化为一个int的堆栈,看起来像是不能重用于其他类型。
是这种情况,还是Stack可以重用来包含其他类型?
答案 0 :(得分:0)
我发现最好的是将它包装在一个函数中。我不是特别喜欢这个:
@numba.jit
def make_stack_class(typ):
linkednode_spec = OrderedDict()
linkednode_type = deferred_type()
linkednode_spec['data'] = data_type = deferred_type()
linkednode_spec['next'] = optional(linkednode_type)
@jitclass(linkednode_spec)
class LinkedNode(object):
def __init__(self, data):
self.data = data
self.next = None
linkednode_type.define(LinkedNode.class_type.instance_type)
stack_spec = OrderedDict()
stack_spec['head'] = optional(linkednode_type)
stack_spec['size'] = intp
@jitclass(stack_spec)
class Stack(object):
def __init__(self):
self.head = None
self.size = 0
def push(self, data):
new = LinkedNode(data)
new.next = self.head
self.head = new
self.size += 1
def pop(self):
old = self.head
if old is None:
raise ValueError("empty")
else:
self.head = old.next
self.size -= 1
return old.data
data_type.define(typ)
return Stack