You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将自定义IPython Cell Magic的输出存储到变量中?

如何将自定义Cell Magic的输出存储到变量中?

有几种实用的方法可以捕获自定义Cell Magic的输出并存储到变量中,下面逐一说明:

方法1:利用IPython的_变量捕获输出

IPython会自动将最后一个表达式的结果存在_变量里,Cell Magic执行后的返回值也可以通过这个变量获取。

先定义你的Cell Magic:

from IPython.core.magic import register_cell_magic

@register_cell_magic
def cellmagic(line, cell):
    # 示例:将单元格内容转为大写
    return cell.upper()

执行Cell Magic:

%%cellmagic
hello world
this is a multi-line cell

然后将结果存入变量:

my_result = _
print(my_result)

输出:

HELLO WORLD
THIS IS A MULTI-LINE CELL

方法2:让Cell Magic支持直接指定目标变量

修改你的Cell Magic函数,让它接受一个变量名作为行参数,直接将结果赋值到IPython的用户命名空间中,使用起来更直观。

示例代码:

from IPython.core.magic import register_cell_magic
from IPython import get_ipython

@register_cell_magic
def cellmagic(line, cell):
    # 获取用户指定的变量名(行参数部分)
    target_var = line.strip()
    # 对单元格内容做处理,这里示例是反转每行文本
    processed_content = '\n'.join([line[::-1] for line in cell.split('\n')])
    
    # 获取当前IPython会话的命名空间,将结果赋值给目标变量
    ip = get_ipython()
    ip.user_ns[target_var] = processed_content
    
    # 可选:返回结果,方便直接查看
    return processed_content

使用时直接在魔法命令后指定变量名:

%%cellmagic reversed_text
hello
custom cell magic

之后直接使用变量:

print(reversed_text)

输出:

olleh
cig rem llec motsuc

方法3:用%%capture捕获输出(适合包含打印的场景)

如果你的Cell Magic是通过print()输出内容而不是返回值,可以用IPython内置的%%capture魔法捕获输出流,再提取内容。

示例:

# 先定义一个会打印内容的Cell Magic
@register_cell_magic
def print_cellmagic(line, cell):
    print(f"处理后的内容:\n{cell.lower()}")

用%%capture捕获输出:

%%capture output
%%print_cellmagic
HELLO WORLD
TEST CONTENT

提取并存储结果:

result = output.stdout.strip()
print(result)

输出:

处理后的内容:
hello world
test content

内容的提问来源于stack exchange,提问作者hannah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 13:30:47