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

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


当前回答

还有一个潘岩建议的改进版本。它添加了显示代码单元格的按钮:

%%html
<style id=hide>div.input{display:none;}</style>
<button type="button" 
onclick="var myStyle = document.getElementById('hide').sheet;myStyle.insertRule('div.input{display:inherit !important;}', 0);">
Show inputs</button>

或python:

# Run me to hide code cells

from IPython.core.display import display, HTML
display(HTML(r"""<style id=hide>div.input{display:none;}</style><button type="button"onclick="var myStyle = document.getElementById('hide').sheet;myStyle.insertRule('div.input{display:inherit !important;}', 0);">Show inputs</button>"""))

其他回答

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

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

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

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

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

你不需要做太多,除了启用扩展:

http://localhost:8888/nbextensions?nbextension=collapsible_headings
http://localhost:8888/nbextensions?nbextension=codefolding/main

很可能你会在这里找到你所有的扩展:

http://localhost:8888/nbextensions

更新:

更新的jupyter-lab是一个更现代和功能丰富的界面,默认支持单元格折叠。请看下面@intsco的回答

更新2

由于jupyter-lab现在也支持扩展,您可以使用collapsible_heading扩展扩展内置的单元格折叠功能。

最初的回答:

jupyter contrib nbextensions Python包包含一个代码折叠扩展,可以在笔记本中启用。点击链接(Github)获取文档。

使用命令行安装:

pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user

为了便于管理它们,我还推荐jupyter nbextensions配置器包。这在Notebook界面中提供了一个额外的选项卡,在那里您可以轻松地(解除)激活所有已安装的扩展。

安装:

pip install jupyter_nbextensions_configurator
jupyter nbextensions_configurator enable --user

我有同样的问题,我发现这个扩展有用

pip install aquirdturtle_collapsible_headings

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

将下面的代码块保存在一个名为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()