首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Python中引用Cython常量

在Python中引用Cython常量
EN

Stack Overflow用户
提问于 2018-07-12 05:30:40
回答 1查看 1.1K关注 0票数 2

我有一个C-header文件(让我们称它为myheader.h),它包含一些字符串定义,例如:

代码语言:javascript
复制
#define MYSTRING "mystring-constant"

在Cython中,我创建了一个cmy.pxd文件,其中包含:

代码语言:javascript
复制
cdef extern from "myheader.h":
    cdef const char* MYSTRING "MYSTRING"

以及一个相应的my.pyx文件,其中包含一些类定义,所有这些定义都以:

代码语言:javascript
复制
from cmy cimport *

然后,我尝试在Python脚本中引用该字符串:

代码语言:javascript
复制
from my import *

def main():
     print("CONSTANT ", MYSTRING)

if __name__ == '__main__':
    main()

问题是我一直收到一个错误:

代码语言:javascript
复制
NameError: name 'MYSTRING' is not defined

我搜索了文档,但找不到问题所在。任何建议都是受欢迎的--我承认这可能是很愚蠢的事情。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-12 05:57:19

您不能从Python访问cdef变量。因此,您必须创建一个与您的定义相对应的Python对象,如下所示(它使用Cython>=0.28-feature verbatim-C-code,因此您需要一个最新的Cython版本来运行该代码片段):

代码语言:javascript
复制
%%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是一个字节对象:

代码语言:javascript
复制
>>> print(MYSTRING)
b'mystring-constant'
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51294436

复制
相关文章

相似问题

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