Python技术迷

10 个 Jupyter 魔法命令,一个比一个强!

前几天在公司写个小实验,临时用 Jupyter Notebook 跑代码,结果我一个同事凑过来看我命令写得飞起,说“卧槽你这是魔法吧?”。其实还真是,Jupyter 里那种前面带个 % 或 %% 的命令,就叫“魔法命令(Magic Command)”。 很多人平时都在 Notebook 里写 Python,却根本不知道这些东西能多省事。

今天我就随手整理了我平时最常用的 10 个魔法命令,每一个都是真香系列。

1. %time / %timeit —— 代码性能分析神器

这个命令我用得最多。比如你想知道某段代码执行了多久:

%time sum([i for i in range(1000000)])

如果你想要更准确的平均时间,用 %timeit:

%timeit sum([i for i in range(1000000)])

区别是 %timeit 会多次执行取平均值,结果更可靠。写算法优化时,绝对好用。

2. %pwd / %cd —— 直接操作路径

有时候 Notebook 的文件路径老变,你还得 import os 去查?完全没必要。

%pwd  # 查看当前路径
%cd ../data  # 切换目录

这比用 os.getcwd() 快多了,特别是数据分析的时候频繁切目录。

3. %lsmagic —— 看看你都能用哪些魔法

如果你忘了有哪些命令可用,这一条相当于魔法目录:

%lsmagic

它会列出所有的 line magic(行命令)和 cell magic(块命令)。第一次看到会有种“我居然一直在错过这些”的感觉。

4. %run —— 运行外部脚本

有时候我懒得复制一大段旧代码到 Notebook,就直接:

%run my_script.py

运行完之后,脚本里定义的变量还能直接在 Notebook 里继续用。相当于 import 加执行一体化。

5. %matplotlib inline —— 图直接显示在 Notebook 里

每次画图之前都加这一句:

%matplotlib inline
import matplotlib.pyplot as plt

plt.plot([1, 2, 3], [2, 4, 6])
plt.show()

图就会直接在 Notebook 输出里显示出来,不用弹出窗口。现在大多数人都知道这条,但其实还有兄弟命令 %matplotlib notebook,是交互式的,可以缩放、移动。

6. %who / %whos —— 看看你现在有哪些变量

调试代码时特别方便:

a = 10
b = [1, 2, 3]
%whos

输出像这样:

Variable   Type    Data/Info
a          int     10
b          list    n=3

这比 locals() 好看多了,也能帮你快速查内存里存了啥。

7. %%time —— 计时整块代码

如果你要测的是多行代码的运行时间,就要用双百分号的版本:

%%time
total = 0
for i in range(1000000):
    total += i
total

注意 %time 是行命令,%%time 是块命令。写算法调优时用这个非常爽。

8. %history —— 查看命令历史

有时候你写了一堆代码,结果忘了之前调过哪个参数,可以用:

%history -n 1-10

输出你最近的 10 条命令。甚至还能把它导出成文件:

%history -f history.py

下次直接 run 起来继续调试。

9. %%writefile —— 把代码写进文件

我平时写 demo 时经常这样:

%%writefile demo.py
defgreet(name):
returnf"Hello, {name}!"

直接在 Notebook 里生成一个 Python 文件。省去了打开编辑器、复制粘贴的麻烦,尤其适合写临时工具。

10. %reload_ext autoreload —— 自动重载模块

这个是真·高频使用。比如你在不断修改一个模块的代码,而 Notebook 又懒得重启:

%load_ext autoreload
%autoreload 2

以后每次执行 cell 时,Jupyter 会自动重新加载被修改的模块内容,不用 importlib.reload(),更不用重启内核。

番外:! 命令也是魔法

其实 Jupyter 里还有一类“系统级魔法”,比如:

!ls
!pip install requests

前面加个 ! 就能执行 shell 命令。对,就是在 Notebook 里直接跑终端命令。

小结一下

这些魔法命令其实是 Jupyter 的灵魂,用好了能让你写代码的节奏流畅到飞起。 简单说就是:

  • % 是单行命令;
  • %% 是针对整个 cell 的命令;
  • ! 是执行系统命令。

最后给你个小练习: 打开一个新的 Notebook,敲 %lsmagic 看看有多少还没用过的。 你可能会发现,这玩意比写 Python 还好玩。

-END-

我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html

🔥虎哥私藏精品🔥

虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB,点击下方公众号回复关键字 python 全部免费领