我有几个变量应该可以在程序中全局访问。由于它们经常被使用,我正在考虑给它们一种类型,根据我的理解,它会加快速度。
我做不到。在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方式声明它
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
仅适用于函数,对变量定义没有意义。