如何为 Jupyter notebook 中的每个单元格启用计时魔法?

How to enable timing magics for every cell in Jupyter notebook?

%%time%%timeit 魔术可以实现 Jupyter 或 iPython 笔记本中单个单元格的计时。

是否有类似的功能可以为 Jupyter notebook 中的每个单元格打开和关闭计时?

是相关的,但没有回答更普遍的问题,即在每个单元格中自动启用给定的魔法。

一个 hacky 方法是通过 custom.js 文件(通常放在 ~/.jupyter/custom/custom.js 中)

如何为工具栏创建按钮的示例位于 here,这就是我根据此答案得出的结论。它只是在按下启用按钮时将你想要的魔法的字符串形式添加到所有单元格中,而禁用按钮使用 str.replace 到 "turn" 将其关闭。

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.
        ]);
    });
});