我能强迫一个表达式被numba当作常量吗?

2024-05-17 11:34:49 发布

您现在位置:Python中文网/ 问答频道 /正文

给定一个numba不知道的全局非突变对象:

from types import SimpleNamespace
a = SimpleNamespace(b=2)

我希望能够在jitted函数中引用此对象的一个成员作为编译时常量,如下所示:

@numba.njit
def foo():
    # return a.b   # fails, because numba tries to evaluate at runtime
    return numba.mark_this_as_constant(a.b)

在numba中mark_this_as_constant是否已经以不同的名称存在?有没有可能自己写,或者用自定义类型?你知道吗

我可以通过以下方式得到今天想要的:

def foo(a_b=a.b):
   @numba.njit
   def foo():
       return a_b
   return foo
foo = foo()

但这很糟糕,需要我在顶部列出每个闭包,而不是在使用点。你知道吗


Tags: 对象fromimportreturnfoodefasthis