Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么不是';你不去建房子吗?_Python_Python 3.x_Go_Cgo - Fatal编程技术网

Python 为什么不是';你不去建房子吗?

Python 为什么不是';你不去建房子吗?,python,python-3.x,go,cgo,Python,Python 3.x,Go,Cgo,我正在包装Python的Go库。我需要能够返回None,但在编译时找不到它: /* #cgo pkg-config: python3 #define Py_LIMITED_API #include <Python.h> */ import "C" //export Nothing func Nothing(self, args *C.PyObject) (status *C.PyObject) { C.Py_IncRef(C.Py_None) return C.Py

我正在包装Python的Go库。我需要能够返回None,但在编译时找不到它:

/*
#cgo pkg-config: python3
#define Py_LIMITED_API
#include <Python.h>
*/
import "C"

//export Nothing
func Nothing(self, args *C.PyObject) (status *C.PyObject) {
    C.Py_IncRef(C.Py_None)
    return C.Py_None
}
我不明白它是如何找到所有其他Py*函数和类型的(
PyArgs\u ParseTuple
PyLong\u FromLong
工作得很好),但找不到
Py\u None
。Python库显然正在加载。这是怎么回事?

多亏了来自的评论,答案是用C编写一个不返回任何值的函数。这是必需的,因为
Py_None
是一个宏,Go无法看到

none.c

#define Py_LIMITED_API
#include <Python.h>

PyObject *IncrNone() {
        Py_RETURN_NONE;
}
#定义Py_LIMITED_API
#包括
PyObject*IncrNone(){
Py_返回_无;
}
mymodule.go

/*
#cgo pkg-config: python3
#define Py_LIMITED_API
#include <Python.h>

PyObject *IncrNone();
*/
import "C"

//export Nothing
func Nothing(self, args *C.PyObject) (status *C.PyObject) {
        return C.IncrNone()
}
/*
#cgo-pkg配置:python3
#定义Py_LIMITED_API
#包括
PyObject*IncrNone();
*/
输入“C”
//不出口
func Nothing(self,args*C.PyObject)(状态*C.PyObject){
返回C.IncrNone()
}

看起来像
Py_None
是一个宏:哇,我从来没有想到过。你到底怎么能从围棋中一无所获呢?当然这是有人碰到过的事情……我对cgo一无所知,但你可能会以某种方式引用
\u Py\u nonestuct
的地址,这就是
Py\u None
的扩展。
/*
#cgo pkg-config: python3
#define Py_LIMITED_API
#include <Python.h>

PyObject *IncrNone();
*/
import "C"

//export Nothing
func Nothing(self, args *C.PyObject) (status *C.PyObject) {
        return C.IncrNone()
}