假设我们有一个cython类a
,它的指针指向float
,如
# A.pyx
cdef class A:
cdef float * ptr
我们还在另一个模块中有一个cython类b
,它需要访问ptr
下的数据:
# B.pyx
cdef class B:
cdef float * f_ptr
cpdef submit(self, ptr_var):
self.f_ptr= get_from( ptr_var ) # ???
使用A
和B
的相应Python代码可能类似于
from A import A
from B import B
a = A()
b = B()
ptr = a.get_ptr()
b.submit(ptr)
我们如何定义get_ptr()
以及在b
中,我们将对get_from
使用什么?
解决方案是将指针变量包装到一个Python对象中。模块libc.stdint提供了一个名为uintptr_t
的类型,它是一个足够大的整数,可以存储任何类型的指针。这样,解决方案可能如下所示。
from libc.stdint cimport uintptr_t
cdef class A:
cdef float * ptr
def get_ptr(self):
return <uintptr_t>self.ptr
尖括号中的表达式
对应于对uintptr_t
的强制转换。在类B中,我们必须将变量转换回一个要浮点的指针。
from libc.stdint cimport uintptr_t
cdef class B:
cdef float * f_ptr
cpdef submit(self, uintptr_t ptr_var):
self.f_ptr= <float *>ptr_var
这适用于任何类型的指针,不仅适用于浮动的指针。必须确保这两个模块(a
和B
)处理的指针类型相同,因为一旦指针包装在UINTPTR_T
中,该信息就会丢失。
问题内容: 假设我有一个名为的软件包,其中包含: 和: 然后我执行以下脚本: 这是我的期望: 这是我得到的: 谁能解释我的误解? 问题答案: 您正在使用。在导入模块的全局范围(或发生import语句的任何范围)中成为符号。 当您为指定新值时,您也只是在更改哪些值点,而不是实际值。尝试直接使用in导入,并通过设置在那里进行实验。这样,您实际上将在此上下文中修改哪个是“实际”值。 它有点令人费解,
问题内容: 我有两个 newAccessLevels.java ,它有两个按钮“ Level 1”,“ Level 2”和 newAccessPanel.java。 我需要获取用户选择“ 1或2”的级别,以便可以在标题中显示它。 accessPanel.java, 例如访问级别1,访问级别2。如何完成此操作。下面是示例代码,因此,如果单击级别1,则将打开标题为* ACCESS LEVEL 1 的n
问题内容: 我正在尝试将cython模块data.pyx导入另一个cython模块user.pyx。一切编译正常,但是当我尝试在python模块中调用user.pyx时,出现错误“ ImportError:没有名为data的模块”。 一切都在同一目录中。 我的setup.py 运行以下test.py将引发错误。 我得到的例外是 如何进行导入?谢谢你的帮助。 问题答案: 我可能缺少有关Cython的
问题内容: 在我的angularJS应用程序中,我有两个模块:模块A和模块B。 如何在模块B中调用该函数? 问题答案: 您需要在 模块A中 定义一个工厂: 然后使用 模块B中* 的工厂: *
我的视图文件夹中有两个EJ,我创建了非常简单的EJ,看看是否可以将变量从一个EJ发送到另一个EJ。 a、 vews文件中的ejs b.ejs有 在我的节点js这是什么我做const表达式=要求('Express'); const body Parser=要求('body-parser'); 我想邮报必须在这里做点什么...
问题内容: 将尽可能多的字节从ByteBuffer 放入另一个ByteBuffer 的最有效方法是什么(以及知道传输了多少字节)?我正在尝试,但似乎要抛出BufferOverflowException,当我需要它们时,我现在无法从Sun获取Javadocs(网络问题)。> :( argh。 编辑:darnit,如果bbuf_src是ReadOnly缓冲区,则@Richard 的方法(使用来自bac