在Ipython Notebook的降级单元中扩展变量



在ipython-notebook中的标记单元格中,我希望能够自动扩展变量。可以做到吗?

为例,请考虑以下代码

from IPython.core.display import HTML
from markdown import markdown
base_url = "https://stackoverflow.com/"
markdown_string = "Two categories at [stackoverflow]({0}) are "
                  "[ipython-notebook]({0}questions/tagged/ipython-notebook) and "
                  "[matplotlib]({0}questions/tagged/matplotlib).".format(base_url)
HTML("<p>{}</p>".format(markdown(markdown_string)))

这与 base_url相对于

的链接而产生的输出单元格正确性链接正确

Stackoverflow的两个类别是Ipython Notebook和Matplotlib。

我想要的是能够将降价直接输入单元格中,引用预定义的变量。这可能吗?

尽管无法使用真实的Markdown单元格,但您可以轻松地创建魔术以获得相同的效果。

from __future__ import absolute_import
from IPython.core.getipython import get_ipython
from IPython.core.magic import (Magics, magics_class,  cell_magic)
@magics_class
class MarkdownMagics(Magics):
    @cell_magic
    def markdown(self, line, cell):
        from IPython.core.display import HTML
        from markdown import markdown
        vars = line.split()
        d = {}
        for k, v in self.shell.user_ns.items():
            if k in vars:
                d[k] = v
        return HTML("<p>{}</p>".format(markdown(cell.format(**d))))
get_ipython().register_magics(MarkdownMagics)

设置一些变量

foo = 1
bar = 2

然后调用魔术,参数是您要从名称空间中获取的变量。

%%markdown foo bar
Substitute _{foo}_ and *{bar}*

如@jakob在评论中的回答,最简单的方法是安装python-markdown ipython笔记本电脑扩展,如Wiki页面上所述。

然后,您可以通过卷曲括号来访问Markdown中的变量:

python单元格:

x = 1000

降压单元格:

Insert variable contents here -> {{x}}.

降价单元被解析为:

Insert variable contents here -> 1000.

最新更新