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

如何在Jupyter Notebook中实现代码单元格的相互隔离?

让Jupyter Notebook代码单元格相互隔离的方法

当然有办法!Jupyter默认共享全局命名空间确实会让单元格互相影响,但我们可以用几种简单的方式实现隔离,完全不用修改你已经写好的注释:

  • 用IPython魔法命令快速重置变量
    这是最省事的方法,在每个需要隔离的单元格开头加上%reset -f(-f是强制跳过确认),它会清除之前所有的全局变量,让每个单元格运行时都像从零开始一样。如果只想清除特定变量(比如你例子里的centroids),可以写成%reset -f centroids,这样其他可能需要保留的变量不受影响。
    比如你的第二个单元格可以改成:

    %reset -f
    import numpy as np
    import matplotlib.pyplot as plt
    centroids = np.random.random_sample([20, 2])
    print(centroids)
    fig = plt.figure()
    graph = plt.axes(xlim=(0, 1), ylim=(0, 1))
    plt.show()
    
  • 用局部命名空间隔离变量
    如果你不想清除全局变量,还可以把每个单元格的代码放在独立的局部命名空间里运行,这样变量不会污染全局环境。比如用exec()函数指定自定义的命名空间字典:
    第一个单元格:

    import numpy as np
    # 定义局部命名空间
    cell_ns = {}
    # 在局部空间里执行你的代码
    exec("centroids = np.random.random_sample([20, 2])\nprint(centroids)", globals(), cell_ns)
    

    第二个单元格:

    import numpy as np
    import matplotlib.pyplot as plt
    cell_ns = {}
    exec("centroids = np.random.random_sample([20, 2])\nprint(centroids)\nfig = plt.figure()\ngraph = plt.axes(xlim=(0, 1), ylim=(0, 1))\nplt.show()", globals(), cell_ns)
    

    这样两个单元格的centroids分别存在各自的cell_ns里,完全不会互相干扰。

  • 用子进程运行代码(彻底隔离)
    要是你需要最彻底的隔离(连内核状态都不共享),可以把每个单元格的代码保存成单独的.py脚本,然后在单元格里用%run魔法命令执行,比如:

    %run my_first_cell.py
    

    每个脚本都会在独立的子进程中运行,完全不受其他单元格的影响,缺点是需要额外管理脚本文件,但胜在隔离性拉满。

这些方法都不需要改动你已经写好的注释,只需要在单元格开头加几行代码或者魔法命令就行,完美适配你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:04:26