ML基础-Jupyter notebook中的魔法命令
在 Jupyter Notebook 或 IPython 环境中,“魔法命令”(Magic Commands)是一些以百分号(%
)或惊叹号(!
)开头的特殊命令,用于执行一些与代码运行环境相关的操作,而不仅仅是执行普通的 Python 代码。魔法命令可以大大增强 Jupyter Notebook 的功能和用户体验。
用过colab的人应该很熟悉了。
1. %
开头的魔法命令
%
开头的魔法命令分为两类:行魔法命令(Line Magic)和单元魔法命令(Cell Magic)。行魔法命令以单 %
开头,作用于单行代码;单元魔法命令以双 %%
开头,作用于整个代码单元。
1.1 常见 %
魔法命令
命令 | 描述 | 示例 |
---|---|---|
%time | 测量单行代码的执行时间 | %time result = some_function() |
%timeit | 多次运行单行代码以获取更准确的执行时间 | %timeit result = some_function() |
%run | 运行外部 Python 脚本 | %run myscript.py |
%pwd | 显示当前工作目录 | %pwd |
%ls | 列出当前目录下的文件和文件夹 | %ls |
%cd | 更改当前工作目录 | %cd /path/to/directory |
%who | 列出当前命名空间中的变量 | %who |
%whos | 显示变量的详细信息 | %whos |
%reset | 清除当前命名空间中的所有变量 | %reset |
%history | 显示命令历史 | %history |
%lsmagic | 列出所有可用的魔法命令 | %lsmagic |
%config | 查看或修改配置 | %config InlineBackend.figure_format = "retina" |
%debug | 进入交互式调试模式 | %debug |
%store | 保存变量到磁盘,可在后续会话中恢复 | %store variable |
%store -r | 从磁盘恢复保存的变量 | %store -r variable |
%psource | 显示对象的源代码 | %psource my_function |
1.2 常见 %%
魔法命令
命令 | 描述 | 示例 |
---|---|---|
%%time | 测量整个代码单元的执行时间 | %%time result = some_function() print(result) |
%%writefile | 将代码单元的内容写入文件 | %%writefile myfile.py def hello(): print("Hello, world!") |
%%capture | 捕获代码单元的输出 | %%capture print("This output will be captured.") |
%%bash | 执行 Bash 命令 | %%bash echo "Hello from Bash!" ls |
%%html | 渲染 HTML 代码 | %%html <h1>Hello, world!</h1> |
2. !
开头的魔法命令
!
开头的命令用于在 Jupyter Notebook 中执行系统命令,类似于在终端中运行命令。
2.1 常见 !
命令
命令 | 描述 | 示例 |
---|---|---|
!ls | 列出当前目录下的文件和文件夹 | !ls |
!pwd | 显示当前工作目录 | !pwd |
!cd | 更改当前工作目录(注意:!cd 不会改变 Jupyter 的工作目录,仅对当前单元有效) | !cd /path/to/directory |
!mkdir | 创建新目录 | !mkdir new_folder |
!rm | 删除文件 | !rm file.txt |
!rmdir | 删除空目录 | !rmdir folder |
!pip install | 安装 Python 包 | !pip install package_name |
!echo | 打印文本 | !echo "Hello, world!" |
3. 使用示例
3.1 %
魔法命令示例
# 测量单行代码的执行时间
%time result = [i for i in range(1000000)]
# 列出当前目录下的文件
%ls
# 显示当前工作目录
%pwd
# 清除所有变量
%reset
# 显示变量详细信息
%whos
3.2 %%
魔法命令示例
# 测量整个代码单元的执行时间
%%time
import time
time.sleep(2)
print("Done!")
# 将代码写入文件
%%writefile example.py
def greet(name):
print(f"Hello, {name}!")
3.3 !
命令示例
# 列出当前目录下的文件
!ls
# 创建新目录
!mkdir test_folder
# 安装 Python 包
!pip install numpy
4. 总结
%
开头的魔法命令用于执行单行操作或配置环境。%%
开头的魔法命令用于对整个代码单元进行操作。!
开头的命令用于执行系统命令,类似于在终端中运行命令。 这些魔法命令能够显著提升 Jupyter Notebook 的使用效率,帮助用户更便捷地进行数据分析和代码调试。
除了前面提到的 %
和 !
开头的魔法命令之外,Jupyter Notebook 和 IPython 还提供了许多其他有用的魔法命令,这些命令可以帮助用户更高效地进行数据分析、代码调试和环境管理。
以下是一些补充的魔法命令及其使用示例。
补充的魔法命令
1. %matplotlib:绘图相关
%matplotlib inline
:将 Matplotlib 图形嵌入到 Notebook 中。%matplotlib notebook
:生成可交互的图形,支持缩放和移动。%config InlineBackend.figure_format = "retina"
:提高图形的分辨率。
示例:
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
plt.plot(x, np.sin(x))
plt.show()
2. %pdb:调试相关
%pdb
:开启或关闭自动调试模式。当代码中出现异常时,会自动进入调试模式。%debug
:进入交互式调试模式,用于调试当前代码。
示例:
%pdb on # 开启自动调试模式
def divide(a, b):
return a / b
result = divide(10, 0) # 这里会触发异常并进入调试模式
3. `%load:代码加载
%load
:将外部文件的内容加载到当前代码单元中。%load_ext
:加载扩展模块,例如sql
或autoreload
。
示例:
%load myscript.py # 将 myscript.py 的内容加载到当前单元
4. %autoreload:自动重新加载模块
%load_ext autoreload
:加载自动重新加载扩展。%autoreload 2
:自动重新加载所有模块,每次调用函数时都会重新加载模块。
示例:
%load_ext autoreload
%autoreload 2
import mymodule
mymodule.some_function() # 如果 mymodule.py 被修改,会自动重新加载
5. %who:变量管理
%who
:列出当前命名空间中的变量。%whos
:列出当前命名空间中的变量及其详细信息。%reset
:清除当前命名空间中的所有变量。%store
:保存变量到磁盘,可在后续会话中恢复。%store -r
:从磁盘恢复保存的变量。
示例:
a = 10
b = "Hello"
%who # 列出变量
%whos # 列出变量及其详细信息
%reset # 清除所有变量
6. %history:命令历史
%history
:显示命令历史。%history -f filename.py
:将命令历史保存到文件。
示例:
%history # 显示命令历史
%history -f my_history.py # 将命令历史保存到文件
7. %lsmagic:列出所有魔法命令
%lsmagic
:列出所有可用的魔法命令。
示例:
%lsmagic
8. %config:配置
%config
:查看或修改配置。
示例:
%config InlineBackend.figure_format = "retina" # 设置图形格式为 Retina
9. %paste:粘贴代码
%paste
:将剪贴板中的代码粘贴到当前代码单元中。
示例:
%paste # 粘贴剪贴板中的代码
10. %run:运行脚本
%run
:运行外部 Python 脚本。
示例:
%run myscript.py # 运行 myscript.py 脚本
11. %psource:显示源代码
%psource
:显示对象的源代码。
示例:
def my_function():
print("Hello, world!")
%psource my_function # 显示 my_function 的源代码
12. %timeit:性能分析
%timeit
:多次运行代码以获取更准确的执行时间。%%timeit
:多次运行整个代码单元以获取更准确的执行时间。
示例:
%timeit [i for i in range(1000)] # 测量单行代码的执行时间
%%timeit
result = [i for i in range(1000)] # 测量整个代码单元的执行时间
13. %capture:捕获输出
%%capture
:捕获代码单元的输出,可以将输出保存到变量中。
示例:
%%capture captured_output
print("This output will be captured.")
print("Another line.")
print(captured_output) # 打印捕获的输出
14. %env:环境变量
%env
:设置或查看环境变量。
示例:
%env MY_VAR=123 # 设置环境变量
%env MY_VAR # 查看环境变量
15. %alias:命令别名
%alias
:为系统命令创建别名。
示例:
%alias ll ls -l # 创建别名 ll,等同于 ls -l
!ll
总结
Jupyter Notebook 和 IPython 提供了丰富的魔法命令,这些命令可以帮助用户更高效地进行数据分析、代码调试和环境管理。通过合理使用这些魔法命令,可以显著提升开发效率和用户体验。