我有一个 Python 程序,其中有一个函数应该能够接受 Python lambda,然后传递给正在运行的 C++ 程序。
我正在考虑使用 pickle.dumps 将 lambda 序列化为字符串。然后我将字符串传递给 C++ 程序,之后我使用 boost.python 进行反序列化并在 C++ 中获取 lambda。但是,我刚刚意识到函数不能被 pickle。
我相信应该有我不知道的现有解决方案。在此先感谢您的任何建议!
最佳答案
看看 C API tutorial page .该链接转到有关从 C 调用 Python 函数的部分。听起来您是 C API 的新手,所以请从顶部开始。
Python 不区分各种类型的可调用对象。就 C API 而言,具有 __call__
方法的函数、lambda 和对象是可以互换的。
我不会在此处复制/粘贴所有内容,因为它在链接中写得非常好,但基本上您可以用 C(或 C++,API 在两者中工作)创建 Python 模块。第一个示例向您展示了如何操作。然后你可以从 Python 调用 C 函数,并传递你需要传递的任何东西。所有 Python 对象都通过 PyObject*
指针暴露给 C,C API 提供了许多函数来操作对象、转换为/自 C 数据类型,以及执行调用可调用对象等操作。
像 boost.python 和 SWIG 这样的包装器在内部使用这个 API。
关于C++ 中的 Python lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33273978/