Python 如何为Jupyter笔记本中的每个单元启用计时魔法?

Python 如何为Jupyter笔记本中的每个单元启用计时魔法?,python,ipython-notebook,jupyter-notebook,Python,Ipython Notebook,Jupyter Notebook,%%time和%%timeit魔术可以对Jupyter或iPython笔记本中的单个单元格进行计时 Jupyter笔记本中的每个单元格是否有类似的定时功能 与之相关,但没有回答在每个单元格中自动启用给定魔法这一更一般的问题。实现这一点的黑客方法是通过custom.js文件(通常放在~/.jupyter/custom/custom.js) 如何为工具栏创建按钮的示例就在这里,我就是根据这个示例来回答这个问题的。按下“启用”按钮时,它只是将您想要的魔法字符串形式添加到所有单元格中,而“禁用”按钮使用

%%time
%%timeit
魔术可以对Jupyter或iPython笔记本中的单个单元格进行计时

Jupyter笔记本中的每个单元格是否有类似的定时功能


与之相关,但没有回答在每个单元格中自动启用给定魔法这一更一般的问题。

实现这一点的黑客方法是通过custom.js文件(通常放在
~/.jupyter/custom/custom.js

如何为工具栏创建按钮的示例就在这里,我就是根据这个示例来回答这个问题的。按下“启用”按钮时,它只是将您想要的魔法字符串形式添加到所有单元格中,而“禁用”按钮使用
str.replace
将其“关闭”


回答很好,但是我没有提到我正在一个公司的Jupyter服务器上运行,我不确定我是否有权访问
custom.js
来测试它。最后我有机会在另一个系统上测试它。如前所述,答案没有多大意义——在每个单元格中同时包含
%%time
%%timeit
是没有用的。所以无论你的答案是
%%time\n%%timeit\n
,我都用
%%time\n
替换了它。但一般的方法效果很好。谢谢顺便说一下,
fa-clock-o
的图标可以工作,但不能
fa-stop-circle-o
。Jupyter核心版本4.2.0。可能是相关的
define([
    'base/js/namespace',
    'base/js/events'
], function(Jupyter, events) {
    events.on('app_initialized.NotebookApp', function(){
        Jupyter.toolbar.add_buttons_group([
            {
                'label'   : 'enable timing for all cells',
                'icon'    : 'fa-clock-o', // select your icon from http://fortawesome.github.io/Font-Awesome/icons
                'callback': function () {
                    var cells = Jupyter.notebook.get_cells();
                    cells.forEach(function(cell) {
                        var prev_text = cell.get_text();
                        if(prev_text.indexOf('%%time\n%%timeit\n') === -1) {
                            var text  = '%%time\n%%timeit\n' + prev_text;
                            cell.set_text(text);
                        }
                    });
                }
            },
            {
                'label'   : 'disable timing for all cells',
                'icon'    : 'fa-stop-circle-o', // select your icon from http://fortawesome.github.io/Font-Awesome/icons
                'callback': function () {
                    var cells = Jupyter.notebook.get_cells();
                    cells.forEach(function(cell) {
                        var prev_text = cell.get_text();
                        var text  = prev_text.replace('%%time\n%%timeit\n','');
                        cell.set_text(text);
                    });
                }
            }
            // add more button here if needed.
        ]);
    });
});