gpt4 book ai didi

python - 多个单元格的自定义 IPython 魔术命令

转载 作者:行者123 更新时间:2023-12-05 05:58:38 25 4
gpt4 key购买 nike

如何构建自定义 IPython 魔术命令:

  1. 在运行单元之前先运行一段代码;
  2. 只需要调用一次就可以应用于笔记本的每个单元格。

类似案例
%matplotlib,%pdb,%doctest_mode

示例

In [1]: %myMagic 1
Out[1]: myMagic is: ON

In [2]: x = 1
Out[2]: 'Hello World'

In [3]: x
Out[3]: 'Hello World'
...: 1

In [4]: %myMagic 0
Out[4]: myMagic is: OFF

In [5]: y=x+1
...: y
Out[5]: 2

最佳答案

我目前正在研究 Jupyter nbextension我想在内核执行之前将代码单元的全部内容包装在特定的上下文管理器中,根据各种用户可配置的逻辑包装或不包装代码单元。

据我所知,不可能使用魔法来做你想做的事,因为魔法无法连接到 IPython 内核的执行机制中本身。据我所知,你提到的所有这些魔法都是通过更改某些特定模块或类中的设置来工作的,然后控制全局行为该模块/类的其余部分笔记本的。

我必须做的是从 nbextension 端处理这个问题,我在前端 Javascript 中获取单元代码,注入(inject)我的上下文管理器,缩进 block ,然后然后提交编辑后的代码内核执行的代码。作为引用,撰写本文时我的 WIP 是 here ;准系统实现是:

define([
'notebook/js/codecell'
], function (codecell) {

"use strict";

var CodeCell = codecell.CodeCell

return {
load_ipython_extension: function () {
/* Store the original .execute() before overriding,
* for use in the overridden method
*/
var orig_execute = CodeCell.prototype.execute;

// Override .execute()
CodeCell.prototype.execute = function (stop_on_error) {
var orig_text = this.get_text();
var new_text = orig_text;

/* == Make whatever modifications to new_text == */

/* Rewrite the cell text, make the .execute() call,
* and restore the original cell text
*/
this.set_text(new_text);
orig_execute.call(this, stop_on_error);
this.set_text(orig_text);
};
}
};
});

关于python - 多个单元格的自定义 IPython 魔术命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68434162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com