我试图检查numba
是通过值传递还是通过引用传递参数,所以我这样写:
@numba.jit(nopython=True)
def f(x):
return id(x)
运行时会导致以下结果:
TypingError: cannot determine Numba type of <class 'builtin_function_or_method'>
这完全是有道理的(我知道id
不一定是内存地址,但这就是我的想法)。但是:
如何获取jitted函数中参数的内存地址?
numba是否通过值或引用传递参数(以及如何验证这一点)?
答案 0 :(得分:2)
就对id
的调用而言,您只能使用以下所列的python功能:
http://numba.pydata.org/numba-doc/latest/reference/pysupported.html
我的理解是numba遵循python的传递引用与传递值的约定(尽管实际上两者都不完全相同)。它更像是按对象调用。标量之类的不可变对象的行为就像它们通过值传递一样。列表和数组之类的可变对象的行为类似于引用。
最简单的确认方法是尝试传入不同参数类型的变量,在函数中对其进行修改,然后查看它们是否在调用函数后更改。