首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Cython调用带参数的Python函数

使用Cython调用带参数的Python函数
EN

Stack Overflow用户
提问于 2019-03-02 18:52:56
回答 1查看 290关注 0票数 0

我使用Cython在C代码中使用Python函数。我需要从C调用带参数的Python函数,但是当我调用Python函数时,编译器告诉我需要使用PyObject。例如,如果我需要将一个整数传递给Python函数,我必须如何做?

代码语言:javascript
复制
#include <Python.h>
#include "hello.h"

int main (int argc, char **argv)
{
    printf ("Initializing Python Runtime...\n");
    Py_Initialize ();

    inithello();

    PyObject *a;
    start_app(a);

    printf ("Cleanup...\n");
    Py_Finalize ();
    return 0;
}

我正在做这样的事情。start_app是python中的一个带有PyObject参数的函数,我如何初始化PyObject才能在python中使用它?因为现在,当我尝试在python中打印(A)时,

EN

回答 1

Stack Overflow用户

发布于 2019-03-03 00:54:39

我理解您的问题,您有一个名为"hello“的Cython模块,其中包含cdef public函数,这样您就可以从C:

代码语言:javascript
复制
cdef public void start_app(arg):
    # do something...

你想知道如何通过arg。您有两个选择:

  1. arg的类型定义为C类型(在Cython中):

cdef public void start_app(int arg):

这可能是最简单的解决方案-您可以只传递一个C int。

  • 在C中创建一个Python整数:

PyObject* arg = PyLong_FromLong(5);//在Python2中,这将是PyInt_FromLong start_app(arg);Py_DECREF(arg);//删除我们对它的引用

请注意,我假设start_app返回void。如果它返回一个Python对象(除非您另有说明,否则它是默认的),您必须检查该PyObject*是否为NULL (如果有错误,则为NULL ),然后处理该PyObject*的引用计数(当您完成它时,将其DECREF)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54957718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档