You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

在Jupyter Notebook中用Cython实现带类型的全局变量

我明白你想通过给高频全局变量指定Cython类型来提速,但在Jupyter跨代码块访问时遇到了问题——毕竟Jupyter里每个%%cython代码块是独立的编译单元,直接用普通方式定义的变量没法跨块共享,而且cpdef是用来定义混合函数的,不是干这个的。下面给你两种靠谱的解决方案:

方案一:直接定义模块级public全局变量

这种方式最直接,把带类型的变量定义在命名的Cython模块里,然后其他代码块通过cimport来访问:

  1. 首先加载Cython魔法(如果还没加载):
%load_ext cython
  1. 第一个代码块,定义带类型的全局变量并导出为public,同时给模块指定名字:
%%cython --name my_global_vars
# 用cdef定义C级别的全局变量,加上public让其他模块能访问
cdef public int high_freq_int = 0
cdef public double high_freq_double = 2.718
  1. 第二个代码块,通过cimport模块来操作这些变量:
%%cython
# 导入我们刚才定义的命名模块
cimport my_global_vars

def update_globals():
    # 直接操作C级变量,速度拉满
    my_global_vars.high_freq_int += 1
    my_global_vars.high_freq_double *= 1.5
    return (my_global_vars.high_freq_int, my_global_vars.high_freq_double)
  1. 甚至在普通Python代码块里也能直接访问这些变量:
print("初始值:", my_global_vars.high_freq_int, my_global_vars.high_freq_double)
update_globals()
print("更新后:", my_global_vars.high_freq_int, my_global_vars.high_freq_double)

方案二:用Cython类封装全局变量(更结构化)

如果你的全局变量比较多,用类封装会更清晰,也方便管理:

  1. 定义封装类和全局实例:
%%cython --name global_store
cdef class GlobalState:
    # 定义C级别的实例变量
    cdef int counter
    cdef double threshold
    
    def __cinit__(self):
        # 初始化默认值
        self.counter = 0
        self.threshold = 100.0

# 创建一个全局唯一的实例,用public导出
cdef public GlobalState app_state = GlobalState()
  1. 其他代码块访问和修改:
%%cython
cimport global_store

def increment_counter():
    global_store.app_state.counter += 1
    # 可以加一些业务逻辑,比如超过阈值重置
    if global_store.app_state.counter > global_store.app_state.threshold:
        global_store.app_state.counter = 0
    return global_store.app_state.counter

关键注意事项

  • 每个%%cython --name xxx定义的模块是一次性编译的,如果修改了变量定义,必须重启Jupyter内核重新运行所有相关代码块,否则会加载旧的模块版本。
  • public关键字是核心:它会把C级变量导出为模块的Python属性,既允许Cython代码通过cimport快速访问,也允许普通Python代码直接调用。
  • 不要用cpdef定义变量:cpdef是用来创建同时支持Cython和Python调用的函数的,和全局变量没关系,这也是你之前尝试无效的原因。

内容的提问来源于stack exchange,提问作者plx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:00:18