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



我有几个变量应该可以在程序中全局访问。由于它们经常被使用,我正在考虑给它们一种类型,根据我的理解,它会加快速度。

我做不到。在Jupyter Notebook的一个块中,我有这个:

%%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也不起作用。如何获取全局变量?

这是一个与"在Jupyter cdef中运行Cython"的问题非常相似的问题 - cdef对象无法从Python访问。

如果您希望可以从Python

访问变量,则只需以正常的Python方式声明它

magic_number = 42

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

%%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

(请注意,cpdef仅适用于函数,对变量定义没有意义。

最新更新