如何在Jupyter Notebook中使用Cython声明全局变量?

时间:2018-03-11 10:51:09

标签: python global-variables jupyter-notebook cython

我有一些应该可以在程序中全局访问的变量。因为它们经常被使用,所以我想给它们一种从我的理解中加速的类型。

我无法做到这一点。在Jupyter笔记本的一个区块中我有这个:

%%cython
cdef int magic_number = 42

在下一个区块中,我收到以下错误:

print(magic_number)

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-34-a40fcb730ac3> in <module>()
----> 1 print(magic_number)

NameError: name 'magic_number' is not defined

cpdef也不起作用。我怎样才能获得全局变量?

1 个答案:

答案 0 :(得分:1)

对于问题“run Cython in Jupyter cdef”这是一个非常类似的问题 - 无法从Python访问How to escape double quotes in bash?个对象。

如果您希望可以从Python访问该变量,那么只需以普通的Python方式声明它

cdef

请注意,您无法输入这些变量。我认为没有任何方法可以使用Python C API创建一个“模块属性”来访问C变量,因此Cython无法做到这一点。如果在Cython中输入这些变量很重要,那么你必须创建访问器函数来与Python进行交互:

magic_number = 42

(注意%%cython cdef int magic_number = 42 def get_magic_number(): global magic_number # not strictly necessary, but clearer return magic_number def set_magic_number(int value): global magic_number # necessary magic_number = value 仅用于函数,对变量定义没有意义。)