gpt4 book ai didi

c - 如何为 print() 编写 Python 包装器?

转载 作者:太空宇宙 更新时间:2023-11-04 04:16:59 25 4
gpt4 key购买 nike

我有一点使用 Python C 绑定(bind)包装器的经验,但现在让我最痛苦的函数是 print()。例如,在 C 头文件中,函数看起来像

void NumPrint(void* self, FILE* stream)

并且该函数将对象实例的描述打印到流中。它有两个参数,第一个是对应打印的数字对象的引用,第二个是要打印到的流应该打印描述

我不确定如何为此处理包装器。这是一个简单包装器的示例,它包装了 add() ,它将两个数字加在一起......

static PyObject *wrapper(PyObject *self, PyObject *args)
{
// return a C double representation
double inX = PyFloat_AsDouble(args);

// PyObject to return
PyObject* ret;

// run function
double out = c_add(inX, inX);

// build result into PyFloatObject**strong text**
ret = PyFloat_FromDouble(out);

return ret;
}

最佳答案

我想出了答案...

static PyObject* NumberPrintWrapper(PyObject* self, PyObject* reference){

FILE* out = NULL;
size_t size;

// create buffer
char* buffer = malloc(sizeof(*buffer));
if (buffer == NULL)
{
handle_error("buffer");
}

// map buffer to stream using open_memstream()
out = open_memstream(&buffer, &size);
if (out == NULL)
{
handle_error("open_memstream");
}

// call function that requires stream
long* s = PyLong_AsUnsignedLong(reference);
NumPrint(s, out);

// close file handle
fclose(out);

// hand over to Python
PyObject* string = PyString_FromString(buffer);

free(buffer);

return string;
}

关于c - 如何为 print() 编写 Python 包装器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50730736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com