魔术命令是jupyter/ipython专属指令,以%或%%开头,需用%lsmagic查看、%quickref速查、命令后加?获取帮助;常用如%run、%timeit、%whos等,注意路径、作用域及换行限制。

魔术命令不是 Python 语法,不能直接用 import 或普通函数调用;必须以 %(单行)或 %%(整单元格)开头,且只能在 Jupyter Notebook / IPython 环境中运行。
怎么查有哪些魔术命令
执行 %lsmagic 就能看到全部可用命令列表,分两类:line magics(单行,如 %time)和 cell magics(整单元格,如 %%writefile)。
想快速看简明帮助?运行 %quickref。
要查某个命令具体怎么用?后面加 ?,比如 %run? 或 %%timeit? —— 这会弹出文档,比搜网页快得多。
常见用途:运行脚本、测性能、看变量
实际开发中最常碰的几个:
• %run script.py:直接执行外部 .py 文件,变量会注入当前命名空间,适合快速验证逻辑
• %timeit sum(range(10**6)):自动多次运行取平均耗时,比手写 time.time() 更可靠
• %whos:列出所有变量名、类型、大小,比 locals().keys() 直观得多
• %who str:只显示字符串类型变量,支持按类型过滤
• %pwd 和 %ls:查当前路径、看文件,不用切终端
容易踩的坑:路径、作用域、换行限制
• %run 默认基于 notebook 当前工作目录解析路径,不是 notebook 文件所在目录 —— 如果报 FileNotFoundError,先跑 %pwd 确认位置
• %load 是把代码“粘”进当前单元格,不是执行;得再按 Shift+Enter 才真运行,新手常卡在这一步
• 行魔法(%xxx)严格禁止换行,写到一半回车就报错;想跨多行?换 %%xxx(比如 %%bash)
• %store 和 %store -r 能跨 notebook 传变量,但只保存变量值,不保存对象引用关系 —— pandas DataFrame 没问题,带闭包或临时文件句柄的对象可能失效
调试和模块重载:别重启内核
• 出错后别急着重启,直接在错误单元格里输 %debug,就能进 post-mortem 调试器,查看栈帧和局部变量
• 改了外部 .py 模块还想立刻生效?加载 autoreload 扩展:
%load_ext autoreload
%autoreload 2
这样每次调用函数时都会重新导入模块,省掉反复 Ctrl+M → Kernel Restart
真正难的不是记住命令,而是理解它们和 Python 执行模型的边界 —— 魔术命令绕过解释器,直接操作 IPython 内核状态,所以像 %cd 切目录会影响后续所有 open(),而普通 Python 的 os.chdir() 在 notebook 里有时反而不生效。这点不留意,排查起来就很费时间。











