什么是魔法命令
魔法命令(Magic Commands)是 IPython 内核提供的特殊命令,以 % 或 %% 开头,提供了许多普通 Python 代码无法直接完成的功能。
行魔法(Line Magic):%
只对当前行生效。
%timeit sum(range(10000)) %pwd %ls %who
单元格魔法(Cell Magic):%%
对整个单元格生效,必须在第一行。
%%time
for i in range(10**6):
pass
性能测试:%timeit 和 %%time
性能测试是 Jupyter 最常用的魔法命令场景:
%timeit 对 sum(range(10000)) 进行性能测试,输出平均时间和标准差(7次运行,每次10000循环)
# %timeit — 自动运行多次取平均 %timeit sum(range(10000)) 63.4 µs ± 425 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each) # 可以指定运行次数和循环次数 %timeit -n 100 -r 5 sum(range(10000)) # %%time — 整个单元格的一次性计时 %%time data = list(range(10**7)) total = sum(data) CPU times: user 212 ms, sys: 45 ms, total: 257 ms Wall time: 258 ms
- %timeit vs %%time
%timeit自动多次执行取均值,适合微基准测试(microsecond 级别);%%time只执行一次,适合较慢的操作(second 级别)。
文件系统操作
# 显示当前工作目录 %pwd '/private/tmp/jupyter_demo' # 列出文件(等同于 ls 命令) %ls demo.ipynb data.csv images/ # 切换目录 %cd /Users/mi/projects # 创建目录 %mkdir new_folder
数据可视化:%matplotlib
这是数据科学中最重要的魔法命令之一:
# 让图表内联显示在 Notebook 中(推荐) %matplotlib inline # 交互式图表(可以缩放、平移) %matplotlib widget # 在外部窗口显示(传统方式) %matplotlib qt # 之后所有 matplotlib 图表都会内联显示 import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 2*np.pi, 100) plt.plot(x, np.sin(x)) plt.title('y = sin(x)') plt.show() # 图表直接显示在输出区域
TIP
%matplotlib inline 通常放在 Notebook 的第一个单元格,和 import 语句一起。一旦设置,整个会话都有效,无需每个单元格都加。
运行外部脚本:%run
# 运行外部 Python 脚本,脚本中的变量进入当前命名空间 %run analysis.py # 运行并传入参数 %run script.py arg1 arg2 # 运行另一个 Notebook(作为普通 Python 脚本执行) %run helper_notebook.ipynb
写入文件:%%writefile
%%writefile hello.py # 这个单元格的内容会被写入 hello.py 文件 def greet(name): return f"Hello, {name}!" if __name__ == "__main__": print(greet("World")) Writing hello.py
Shell 命令:! 前缀
除了魔法命令,还可以用 ! 前缀直接运行 Shell 命令:
# 直接运行 Shell 命令 !pip install seaborn !git status !cat data.csv | head -5 # 捕获 Shell 命令输出到 Python 变量 files = !ls *.csv print(files) # 返回字符串列表
变量查看
# 查看当前所有变量 %who x y data model # 查看变量及其类型 %whos Variable Type Data/Info -----------|---------|--------- x int 42 y float 3.14 data list n=100 # 删除变量 %reset_selective x # 删除变量 x %reset # 删除所有变量(会确认提示)
查看历史与保存
# 查看执行历史 %history %history -n 1-10 # 第 1-10 次执行的代码 # 保存到文件 %save my_session.py 1-10 # 将第 1-10 次执行的代码保存 # 查看所有可用的魔法命令 %lsmagic
常用魔法命令汇总
| 命令 | 说明 |
|---|---|
%timeit | 自动多次运行,性能基准测试 |
%%time | 单元格一次性计时 |
%matplotlib inline | 设置图表内联显示 |
%run file.py | 运行外部脚本 |
%%writefile f.py | 将单元格内容写入文件 |
%pwd / %cd / %ls | 文件系统操作 |
%who / %whos | 查看当前变量 |
%reset | 清除所有变量 |
%history | 查看执行历史 |
%load file.py | 将文件内容加载到单元格 |
%%html | 将单元格内容渲染为 HTML |
%%bash | 将单元格内容作为 Bash 执行 |
本章小结
%行魔法作用于当前行;%%单元格魔法作用于整个单元格%timeit精确测量性能;%%time快速计时%matplotlib inline启用内联图表(数据科学必备)!前缀直接运行 Shell 命令