我有一些应该可以在程序中全局访问的变量。因为它们经常被使用,所以我想给它们一种从我的理解中加速的类型。
我无法做到这一点。在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
也不起作用。我怎样才能获得全局变量?
答案 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
仅用于函数,对变量定义没有意义。)