首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在IPython /木星中有可能组合魔法吗?

在IPython /木星中有可能组合魔法吗?
EN

Stack Overflow用户
提问于 2018-11-08 08:45:26
回答 2查看 1.5K关注 0票数 5

有时你想同时使用多个魔法。现在我知道你可以用

代码语言:javascript
运行
复制
%%time
%%bash
ls 

但当我自己做命令的时候这个链子不起作用..。

代码语言:javascript
运行
复制
from IPython.core.magic import register_cell_magic

@register_cell_magic
def accio(line, cell):
    print('accio')
    exec(cell)

使用时出现错误。

代码语言:javascript
运行
复制
%%accio
%%bash
ls

我应该使用什么而不是exec

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-14 09:37:25

您必须应用IPython特殊转换,才能使用单元格魔术运行嵌套魔术。

代码语言:javascript
运行
复制
@register_cell_magic
def accio(line, cell):
    ipy = get_ipython()
    expr = ipy.input_transformer_manager.transform_cell(cell)
    expr_ast = ipy.compile.ast_parse(expr)
    expr_ast = ipy.transform_ast(expr_ast)
    code = ipy.compile(expr_ast, '', 'exec')
    exec(code)

或者简单地调用run_cell

代码语言:javascript
运行
复制
@register_cell_magic
def accio(line, cell):
    get_ipython().run_cell(cell)

结果:

代码语言:javascript
运行
复制
In [1]: %%accio
   ...: %%time
   ...: %%bash
   ...: date
   ...:
accio
Wed Nov 14 17:41:55 CST 2018
CPU times: user 1.42 ms, sys: 4.21 ms, total: 5.63 ms
Wall time: 9.64 ms
票数 9
EN

Stack Overflow用户

发布于 2018-11-14 01:44:03

在IPython源代码中,它们几乎总是使用类来创建神奇的语句,因为它们可以保存值,我认为这就是您所需要的。

请查看此源代码以查看一些示例

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53204167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档