我用的是ipython Jupyter笔记本。假设我定义了一个函数,它在屏幕上占据了很大的空间。有办法让细胞崩溃吗?

我希望函数保持执行和可调用,但我想隐藏/折叠单元格,以便更好地可视化笔记本。我该怎么做呢?


当前回答

正如其他人所提到的,您可以通过nbextensions来实现这一点。我想简单地解释一下我所做的事情,既快捷又简单:

启用可折叠标题: 在您的终端中,首先输入以下命令启用/安装Jupyter Notebook Extensions:

pip install jupyter_contrib_nbextensions

然后,输入:

jupyter contrib nbextension install

重新打开Jupyter Notebook。进入“编辑”选项卡,选择“nbextensions config”。 取消标题“可配置的nbextensions”下的复选框,然后选择“可折叠标题”。

其他回答

这个问题有很多答案,我觉得所有的答案都不令人满意(有些比其他的多),在许多扩展中-代码折叠,按标题折叠等等。没有人能简单有效地做我想要的事情。我真的很惊讶,一个解决方案还没有实现(因为它已经为Jupyter实验室)。

事实上,我非常不满意,以至于我开发了一个非常简单的笔记本扩展,可以在笔记本单元格中展开/折叠代码,同时保持它的可执行性。

GitHub存储库:https://github.com/BenedictWilkinsAI/cellfolding

下面是扩展的一个小演示:

只需双击左边的代码单元格,就可以将其折叠成一行:

再次双击将展开单元格。

扩展可以轻松安装与pip:

pip install nbextension-cellfolding
jupyter nbextension install --py cellfolding --user
jupyter nbextension enable --py cellfolding --user 

并且也与nbeextension配置器兼容。我希望人们会发现这有用!

在~/中创建custom.js文件。Jupyter /custom/包含以下内容:

$("<style type='text/css'> .cell.code_cell.collapse { max-height:30px; overflow:hidden;} </style>").appendTo("head");
$('.prompt.input_prompt').on('click', function(event) {
    console.log("CLICKED", arguments)   
    var c = $(event.target.closest('.cell.code_cell'))
    if(c.hasClass('collapse')) {
        c.removeClass('collapse');
    } else {
        c.addClass('collapse');
    }
});

保存完成后,重新启动服务器并刷新笔记本。您可以通过单击输入标签(In[])来折叠任何单元格。

我用来得到理想结果的方法是:

将下面的代码块保存在一个名为toggle_cell.py的文件中,该文件位于与笔记本相同的目录中

from IPython.core.display import display, HTML
toggle_code_str = '''
<form action="javascript:code_toggle()"><input type="submit" id="toggleButton" value="Show Sloution"></form>
'''

toggle_code_prepare_str = '''
    <script>
    function code_toggle() {
        if ($('div.cell.code_cell.rendered.selected div.input').css('display')!='none'){
            $('div.cell.code_cell.rendered.selected div.input').hide();
        } else {
            $('div.cell.code_cell.rendered.selected div.input').show();
        }
    }
    </script>

'''

display(HTML(toggle_code_prepare_str + toggle_code_str))

def hide_sloution():
    display(HTML(toggle_code_str))

在笔记本的第一个单元格中添加以下内容

from toggle_cell import toggle_code as hide_sloution

需要添加切换按钮的任何单元格只需调用hide_sloution()

您可以创建一个单元格,并将以下代码放在其中:

%%html
<style>
div.input {
    display:none;
}
</style>

运行此单元格将隐藏所有输入单元格。要显示它们,可以使用菜单清除所有输出。

否则,你可以尝试笔记本扩展如下:

https://github.com/ipython-contrib/IPython-notebook-extensions/wiki/Home_3x

JupyterLab支持细胞折叠。单击左侧的蓝色单元格条将折叠单元格。