ric*_*izy 18 c++ python reference pass-by-reference cython
我是Cython和C++的菜鸟,所以我对论证传递有一个问题.我想避免在以下场景中传递参数的副本:
# somefile.pyx
#distutils: language = c++
from libcpp.vector cimport vector
def add_one(vector[int] vect):
cdef int i
n = vect.size()
for i in range(n):
vect[i] += 1
cdef vector[int] v
for i in range(100000):
v.push_back(i)
add_one(v) # <-- ??
Run Code Online (Sandbox Code Playgroud)
我希望该方法add_one只是修改v"就地".我相信在C++中,你可以通过预先挂起参数来实现这一点&,这意味着对指针的任何更改都会传递给指针.这样,您不必担心传递指针或实际对象,即
add_one(v); # in c++
Run Code Online (Sandbox Code Playgroud)
我可以在Cython中做同样的事情,还是我必须明确地将arg类型更改为引用,即def add_one(vector[int]* vect)?
ric*_*izy 17
找到了我自己的问题的答案.显然,你可以通过引用传递,但函数必须是cdef'ed,defnot'ed.即
# somefile.pyx
#distutils: language = c++
from libcpp.vector cimport vector
cdef void add_one(vector[int]& vect):
cdef int i
n = vect.size()
for i in range(<int>n):
vect[i] += 1
cdef vector[int] v
for i in range(100000):
v.push_back(i)
add_one(v)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7758 次 |
| 最近记录: |