在 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 / bresult = 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 2import 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 提供了豐富的魔法命令,這些命令可以幫助用戶更高效地進行數據分析、代碼調試和環境管理。通過合理使用這些魔法命令,可以顯著提升開發效率和用戶體驗。