import numpy as np # 导入 numpy 库,并将其命名为 np
a = np.random.standard_normal((100, 100)) # 创建一个 100x100 的标准正态分布随机数数组
%timeit np.dot(a, a) # 使用 %timeit 魔法命令测量 a 与 a 的点积运算的执行时间
47.6 μs ± 720 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each)
Ctrl-A
: 将光标移动到行首。Ctrl-E
: 将光标移动到行尾。Ctrl-F
: 将光标向前移动一个字符。Ctrl-B
: 将光标向后移动一个字符。Ctrl-P
或向上箭头:在命令历史记录中向后搜索(匹配当前文本)。Ctrl-N
或向下箭头:在命令历史记录中向前搜索(匹配当前文本)。Ctrl-R
: Readline 风格的反向历史搜索(部分匹配)。Ctrl-Shift-V
: 从剪贴板粘贴文本。Ctrl-C
: 中断当前正在执行的代码。 🛑Ctrl-K
: 删除从光标到行尾的文本。Ctrl-U
: 删除当前行上的所有文本。Ctrl-L
: 清除屏幕。 💨以下是 IPython shell 中一些键盘快捷键的图示。
C-b, C-f: 对应于 Ctrl-B 和 Ctrl-F,用于光标移动。
C-a, C-e: 对应于 Ctrl-A 和 Ctrl-E,用于移动到行的开头/结尾。
C-k: 对应于 Ctrl-K,用于删除到行尾的文本。
C-u: 对应于 Ctrl-U,用于删除整行。
对 a_variable
的操作显示了文本操作。
注意:Jupyter notebooks 有自己的一套快捷键。 请探索 Jupyter 的集成帮助!
%
) 作为前缀。%timeit
⏱️ - 测量执行时间%timeit
测量 Python 语句的执行时间。 这对于性能分析非常有用!import numpy as np # 导入 numpy 库,并将其命名为 np
a = np.random.standard_normal((100, 100)) # 创建一个 100x100 的标准正态分布随机数数组
%timeit np.dot(a, a) # 使用 %timeit 魔法命令测量 a 与 a 的点积运算的执行时间
47.6 μs ± 720 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each)
92.5 µs ± 3.43 µs per loop
, µs
代表微秒。?
可以查看其“命令行”选项(类似于帮助手册)。automagic
: 无需 %
的魔法 ✨automagic
允许您在不使用 %
前缀的情况下使用魔法命令,只要没有变量共享相同的名称。%automagic
打开或关闭它。%quickref
: 显示 IPython 快速参考卡。%magic
: 显示所有可用魔法命令的详细文档。%debug
: 在最后一个异常回溯处进入交互式调试器。%pdb
: 在任何异常发生后自动进入调试器。%hist
: 打印命令输入历史记录(可选择包含输出)。%paste
: 执行剪贴板中预格式化的 Python 代码。%cpaste
: 打开一个特殊提示符,用于手动粘贴代码。%run script.py
: 在 IPython 内部运行 Python 脚本。%prun statement
: 使用 cProfile 执行语句并报告性能分析结果。%time statement
: 报告单条语句的执行时间。%timeit statement
: 精确测量平均执行时间。%prun statement
: 使用 cProfile 执行语句并报告性能分析器输出。%reset
: 删除交互式命名空间中的所有变量/名称。
%page OBJECT
: 以分页方式漂亮地打印一个对象并显示它。
%who
, %who_ls
, %whos
: 显示命名空间中的变量,具有不同的详细程度。
%xdel variable
: 删除一个变量并尝试清除其所有引用。
按 q
退出 %quickref
或 %magic
分页器。
%run
命令 🏃 - 执行脚本%run -i
: 访问现有变量%run -i
允许脚本访问 IPython 会话中已定义的变量。%load
: 将脚本导入单元格 (Jupyter)%load
将脚本直接导入代码单元格。按 Ctrl-C
中断正在运行的代码(无论是来自 %run
还是长时间运行的命令)。
这将引发 KeyboardInterrupt
异常,立即停止大多数 Python 程序。
注意:对于编译的扩展,Ctrl-C
可能不会立即生效。
如果 Ctrl-C
没有立即停止执行(特别是当涉及编译的扩展时),您可能需要使用操作系统的工具(例如,Windows 上的任务管理器,Linux 上的 kill
)来强制终止进程。
%paste
和 %cpaste
对于运行从其他地方复制的代码非常有用(在 Jupyter 中相关性较低,因为 Jupyter 支持直接粘贴)。%paste
将剪贴板内容作为单个块执行。%cpaste
%cpaste
打开一个特殊提示符,允许粘贴多个代码块并在执行前进行编辑。Ctrl-P
): 在历史记录中向后搜索,匹配已键入的文本。Ctrl-N
): 在历史记录中向前搜索。Ctrl-R
: 反向搜索(类似于 bash)。 键入字符以查找匹配的命令。 重复按 Ctrl-R 可循环浏览匹配项。_
(一个下划线): 引用上一个输出。__
(两个下划线): 引用倒数第二个输出。_iX
: 将第 X
行的输入表示为字符串(例如,_i5
表示第 5 行的输入)。_X
: 表示第 X
行的输出。%hist
%hist
: 打印输入历史记录,可选择带有行号。%reset
%reset
: 清除交互式命名空间,以及可选的输入/输出缓存。%xdel
%xdel variable
: 删除变量并尝试清除 IPython 对它的内部引用。 这对于内存管理非常有用,尤其是在处理大型数据集时。
即使在使用 del
之后,IPython 的输入/输出历史记录也可能会将大型对象保留在内存中。 请谨慎使用 %xdel
和 %reset
来缓解内存问题。
!
执行 Shell 命令 💥!
前缀以将其作为 shell 命令执行。datasets pandas3ed03cn.qmd pandas3ed10cn.qmd
examples pandas3ed04cn.qmd pandas3ed11cn.qmd
figpath.png pandas3ed05cn.qmd pandas3ed12cn.qmd
figpath.svg pandas3ed06cn.qmd pandas3ed13cn.qmd
my.css pandas3ed07cn.qmd pandas3edA1cn.qmd
pandas3ed01cn.html pandas3ed08cn.qmd pandas3edA2cn.qmd
pandas3ed01cn.qmd pandas3ed09cn.html pandas3edA2cn.quarto_ipynb
pandas3ed02cn.qmd pandas3ed09cn.qmd
datasets pandas3ed03cn.qmd pandas3ed10cn.qmd
examples pandas3ed04cn.qmd pandas3ed11cn.qmd
figpath.png pandas3ed05cn.qmd pandas3ed12cn.qmd
figpath.svg pandas3ed06cn.qmd pandas3ed13cn.qmd
my.css pandas3ed07cn.qmd pandas3edA1cn.qmd
pandas3ed01cn.html pandas3ed08cn.qmd pandas3edA2cn.qmd
pandas3ed01cn.qmd pandas3ed09cn.html pandas3edA2cn.quarto_ipynb
pandas3ed02cn.qmd pandas3ed09cn.qmd
!
命令的输出分配给 Python 变量。['datasets', 'examples', 'figpath.png', 'figpath.svg', 'my.css', 'pandas3ed01cn.html', 'pandas3ed01cn.qmd', 'pandas3ed02cn.qmd', 'pandas3ed03cn.qmd', 'pandas3ed04cn.qmd', 'pandas3ed05cn.qmd', 'pandas3ed06cn.qmd', 'pandas3ed07cn.qmd', 'pandas3ed08cn.qmd', 'pandas3ed09cn.html', 'pandas3ed09cn.qmd', 'pandas3ed10cn.qmd', 'pandas3ed11cn.qmd', 'pandas3ed12cn.qmd', 'pandas3ed13cn.qmd', 'pandas3edA1cn.qmd', 'pandas3edA2cn.qmd', 'pandas3edA2cn.quarto_ipynb']
$
$
将 Python 变量的值替换到 shell 命令中。%alias
: 为常用 shell 命令创建快捷方式(别名)。%bookmark
: 为经常访问的目录创建书签。%cd
: 更改当前工作目录。%pwd
: 返回当前工作目录。%pushd
: 将当前目录放置在堆栈上并更改为目标目录。%popd
: 更改为从堆栈顶部弹出的目录。%dirs
: 返回包含当前目录堆栈的列表。%dhist
: 打印访问过的目录的历史记录。%env
: 以字典形式返回系统环境变量。%matplotlib
: 配置matplotlib
集成选项pdb
的增强版本。%time
和 %timeit
。%prun
和 %lprun
。%debug
🐞%debug
: 在异常发生后激活调试器(事后调试)。u
(up): 在调用堆栈中向上移动。d
(down): 在调用堆栈中向下移动。s
(step): 进入函数调用。n
(next): 执行当前行并移动到下一行(在同一级别)。c
(continue): 继续执行,直到下一个断点或程序结束。q
(quit): 退出调试器。p variable
: 打印 variable
的值。!variable
: 检查变量内容,当变量名与调试器命令相同时很有用。%pdb
: 自动调试%pdb
: 在任何异常发生时自动进入调试器。 这对于调试非常有用!%run -d script.py
: 在运行脚本之前启动调试器。 键入 s
以进入脚本。%run -d -b line_number script.py
: 在指定的 line_number
处设置断点。set_trace()
: 一个“穷人的断点”函数; 将其插入到您的代码中以创建临时断点。debug(function, *args, **kwargs)
: 轻松进入特定函数调用。set_trace()
和 debug()
函数from IPython.core.debugger import Pdb # 从 IPython.core.debugger 模块导入 Pdb 类
import sys # 导入 sys 模块
def set_trace(): # 定义一个名为 set_trace 的函数
Pdb().set_trace(sys._getframe().f_back) # 创建一个 Pdb 对象,并在调用 set_trace 的位置设置一个跟踪点
def debug(f, *args, **kwargs): # 定义一个名为 debug 的函数,它接受一个函数 f 以及任意数量的位置参数和关键字参数
pdb = Pdb() # 创建一个 Pdb 对象
return pdb.runcall(f, *args, **kwargs) # 使用 pdb.runcall 调用函数 f,并传入参数,这将允许您单步调试函数 f
set_trace()
来设置断点。debug(f, *args, **kwargs)
允许通过传入函数 f
及其参数来单步调试函数 f
。%time
和 %timeit
(回顾)%time
: 测量语句的执行时间一次。%timeit
: 多次测量执行时间,以提供更准确的平均值。 它非常适合非常短的操作。my_list = list(range(100000)) # 创建一个包含 0 到 99999 的整数列表
%time for _ in range(100): sum(my_list) # 使用 %time 测量循环 100 次计算 my_list 总和的时间
%timeit sum(my_list) # 使用 %timeit 测量计算 my_list 总和的平均时间
CPU times: user 76.2 ms, sys: 2 μs, total: 76.2 ms
Wall time: 75.9 ms
768 μs ± 4.21 μs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)
%prun
和 %run -p
🕵️♀️%prun statement
: 分析单个 Python 语句。%run -p script.py
: 分析整个脚本。cProfile
。ncalls
: 调用次数。tottime
: 函数中花费的总时间(不包括子函数调用)。percall
: 每次调用的时间 (tottime / ncalls)。cumtime
: 函数及其子函数中的累积时间。percall
: 每次调用的累积时间 (cumtime / ncalls)。filename:lineno(function)
: 函数位置。%lprun
📏%lprun
: 提供特定函数的逐行性能分析,提供比 %prun
更详细的信息。line_profiler
IPython 扩展。
c.InteractiveShellApp.extensions = ['line_profiler']
添加到 ipython_config.py
或使用 %load_ext line_profiler
。%lprun -f function1 -f function2 statement_to_profile
Line #
: 行号。Hits
: 该行被执行的次数。Time
: 在该行上花费的总时间(以计时器单位)。Per Hit
: 每次执行该行的时间。% Time
: 在该行上花费的时间百分比。Line Contents
: 该行的源代码。importlib.reload(module)
: 重新加载单个模块。dreload(module)
(IPython 特有): 深度(递归)重新加载模块及其依赖项 – 一个更强大的解决方案。main()
函数中。 将重要变量保留在顶层,以便在 IPython 中轻松检查。ipython_config.py
) 自定义 IPython 的外观和行为。~/.ipython/profile_default/
)。ipython profile create my_profile
ipython --profile=my_profile
%run
与简单地从命令行执行 Python 脚本有何不同?