IPython魔法是如何工作的

tao*_*.li 4 ipython ipython-notebook ipython-magic

ipthon-sql是ipython的扩展,我首先通过pip install ipython-sql安装它

项目在这里:https://github.com/catherinedevlin/ipython-sql

我的问题是:

当我输入%load_ext sql并按SHIFT + ENTER时,IPython执行这个魔术句的详细程序是什么?谢谢 ...

在此输入图像描述

Tho*_*s K 6

当您在笔记本中运行任何代码时,execute_request会通过笔记本服务器将其发送到"内核",即执行代码的进程.

当内核收到您的代码时,它会通过一系列输入转换器运行它.其中一个检测到此行是魔术命令,并将其重写为:

get_ipython().magic('load_ext sql')
Run Code Online (Sandbox Code Playgroud)

您可以使用查看这些已翻译的命令%hist -t.

.magic()方法接受其参数的第一个单词load_ext,并在字典中查找.您可以通过运行来查看该字典:

get_ipython().magics_manager.magics['line']
Run Code Online (Sandbox Code Playgroud)

(这可能会有所不同,具体取决于您的IPython版本)

这给了它一个方法的参考IPython.core.magics.extension.ExtensionMagics.load_ext,你可以在这里看到.它使用字符串的其余部分调用该方法.

该方法导入包sql,并调用sql.load_ipython_extension(ip)它来设置它.它取决于它所做的扩展 - 在这种情况下,它注册了一些新的魔术函数.