我有一个C-header文件(让我们称它为myheader.h),它包含一些字符串定义,例如:
#define MYSTRING "mystring-constant"
在Cython中,我创建了一个cmy.pxd文件,其中包含:
cdef extern from "myheader.h":
cdef const char* MYSTRING "MYSTRING"
以及一个相应的my.pyx文件,其中包含一些类定义,所有这些定义都以:
from cmy cimport *
然后,我尝试在Python脚本中引用该字符串:
from my import *
def main():
print("CONSTANT ", MYSTRING)
if __name__ == '__main__':
main()
问题是我一直收到一个错误:
NameError: name 'MYSTRING' is not defined
我搜索了文档,但找不到问题所在。任何建议都是受欢迎的--我承认这可能是很愚蠢的事情。
发布于 2018-07-12 05:57:19
您不能从Python访问cdef变量。因此,您必须创建一个与您的定义相对应的Python对象,如下所示(它使用Cython>=0.28-feature verbatim-C-code,因此您需要一个最新的Cython版本来运行该代码片段):
%%cython
cdef extern from *:
"""
#define MYSTRING "mystring-constant"
"""
# avoid name clash with Python-variable
# in cdef-code the value can be accessed as MYSTRING_DEFINE
cdef const char* MYSTRING_DEFINE "MYSTRING"
#python variable, can be accessed from Python
#the data is copied from MYSTRING_DEFINE
MYSTRING = MYSTRING_DEFINE
现在MYSTRING
是一个字节对象:
>>> print(MYSTRING)
b'mystring-constant'
https://stackoverflow.com/questions/51294436
复制相似问题