使用 Cython 将字符串列表从 Python 传递到 C++ 函数的示例
Example of passing a list of strings from Python to C++ function with Cython
我正在兜圈子试图找出 Cython 中的一个相当基本的问题。在 Python 一侧,我有一个可变长度字符串列表。我需要将它们传递给一个 C++ 函数,该函数将处理此列表和 return 一些计算(如果重要的话,与输入长度相同的浮点向量)。我知道如何传递单个字符串,但我真的很难弄清楚如何有效地从 Python->C++ 传递多个字符串的列表。我不需要改变字符串列表,C++ 端会将它们视为只读。这些字符串来自 Python,因此它们是标准的 Python unicode 字符串,但如果重要的话,它们保证是 ASCII。
有人可以举个例子吗?我觉得这不应该太复杂,但我似乎找不到一个好的解释。我肯定还在掌握 Cython 的窍门,所以也许我只是不知道要搜索的正确术语。
Lenormju 的第一个 link 找到了解决方案。我不知道您可以将内存视图放入列表中,但解决方案比我意识到的要容易得多。一个非常简单的最小示例:
# cython: language_level=3
# distutils: language = c++
from libcpp.vector cimport vector
from libcpp.string cimport string
cdef extern from "my_function_src.cc":
cdef void my_function(vector[string] L)
def call_my_function(L):
cdef vector[string] L_buffer = L
my_function(L_buffer)
我正在兜圈子试图找出 Cython 中的一个相当基本的问题。在 Python 一侧,我有一个可变长度字符串列表。我需要将它们传递给一个 C++ 函数,该函数将处理此列表和 return 一些计算(如果重要的话,与输入长度相同的浮点向量)。我知道如何传递单个字符串,但我真的很难弄清楚如何有效地从 Python->C++ 传递多个字符串的列表。我不需要改变字符串列表,C++ 端会将它们视为只读。这些字符串来自 Python,因此它们是标准的 Python unicode 字符串,但如果重要的话,它们保证是 ASCII。
有人可以举个例子吗?我觉得这不应该太复杂,但我似乎找不到一个好的解释。我肯定还在掌握 Cython 的窍门,所以也许我只是不知道要搜索的正确术语。
Lenormju 的第一个 link 找到了解决方案。我不知道您可以将内存视图放入列表中,但解决方案比我意识到的要容易得多。一个非常简单的最小示例:
# cython: language_level=3
# distutils: language = c++
from libcpp.vector cimport vector
from libcpp.string cimport string
cdef extern from "my_function_src.cc":
cdef void my_function(vector[string] L)
def call_my_function(L):
cdef vector[string] L_buffer = L
my_function(L_buffer)