如何在 Jupyter 笔记本中以编程方式创建多个新单元格

bra*_*rin 3 python jupyter-notebook

我想以编程方式在 Jupyter 笔记本中创建多个单元格。

有了这个功能,我可以创建一个单元格

def create_new_cell(contents):
    from IPython.core.getipython import get_ipython
    shell = get_ipython()
    shell.set_next_input(contents, replace=False)
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试多次调用它,例如,从 for 循环中,像这样

for x in ['a', 'b', 'c']:
    create_new_cell(x)
Run Code Online (Sandbox Code Playgroud)

它只会创建一个包含列表中最后一项的单元格。我试图找出是否有“刷新”功能或类似的功能,但没有成功。

有谁知道如何以编程方式正确编写多个单元格?

bra*_*rin 11

我在代码中挖掘了更多,shell.payload_manager发现在当前的实现中set_next_input它没有将single参数传递给shell.payload_manager.write_payload函数。这可以防止笔记本创建多个单元格,因为它们都具有相同的源(set_next_input在本例中为函数)。

话虽如此,以下功能有效。它基本上是write_payload函数将single参数设置为False.

def create_new_cell(contents):
    from IPython.core.getipython import get_ipython
    shell = get_ipython()

    payload = dict(
        source='set_next_input',
        text=contents,
        replace=False,
    )
    shell.payload_manager.write_payload(payload, single=False)
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助那里的人;)