关于 IPython 的简介

IPython 是 Python shell 的增强版,它鼓励一种「执行-探索」式(execute explore) 的工作模式,而不是其他许多语言那种「编辑-编译-运行」(edit-compile-run) 的传统工作模式。而且,它与操作系统 shell 和文件系统之间也有非常紧密的集成,因此,在数据分析工作中得到广泛应用。

IPython 官网为 https://ipython.org/.

1 基础操作

IPython 可通过 pip 进行直接安装 pip install ipython,使用命令行启动 IPython 与启动标准 Python 解释器类似:

$ ipython
Python 3.7.4 (default, Jul  9 2019, 18:13:23)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.7.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: from datetime import d<Tab>
                               date          dbm
                               datetime      dim
                               datetime_CAPI

相较于 Python 标准解释器,IPython 提供的一些额外功能包括:

  • 使用 Tab 实现自动补全功能。
  • 使用问号 ? 呈现对象的说明。
  • 提供了一系列以 % 开头的魔术命令为常见任务的执行提供便利。
  • 提供了额外的绘图功能。
  • 可使用操作系统中的命令。

在 IPython 环境中,我们可以直接使用 %quickref 查看 IPython 的参考手册,也可以使用 %magic 来查看 IPython 中魔术命令的信息,以更好的使用 IPython 工具。

In [1]: %quickref
IPython -- An enhanced Interactive Python - Quick Reference Card
================================================================

obj?, obj??      : Get help, or more help for object (also works as
                   ?obj, ??obj).
?foo.*abc*       : List names in 'foo' containing 'abc' in them.
%magic           : Information about IPython's 'magic' % functions.

Magic functions are prefixed by % or %%, and typically take their arguments
without parentheses, quotes or even commas for convenience.  Line magics take a
single % and cell magics are prefixed with two %%.

Example magic function calls:
:

Tips: IPython 可进行一些自定义的配置,该配置文件位于 ~/.ipython~/.config/.ipython 目录(Unix)和 %HOME%/.ipython 目录(Windows)中。

2 命令历史

IPython 与 Python 解释器一样,采用「逐行输入代码」并「立即执行」的方式,它们均可用Ctrl + P 或 ↑ 查找执行过的命令、使用 Ctrl + N 或 ↓查找(当前查找位置)命令后执行的命令。

此外,IPython 提供了更强的输入输出变量管理以及记录功能:

最近两次执行的结果 (Out) 分别保存在 ___ 变量中。而且,IPython 还采用 _iN, _N 的方式将所有输入及输出的历史记录进行保存 ~ 其中 N 为行号:

In [1]: 2 + 4 / 1.2
Out[1]: 5.333333333333334

In [2]: _
Out[2]: 5.333333333333334

In [3]: 3 ** 5
Out[3]: 243

In [4]: 1 + 7*9
Out[4]: 64

In [5]: __
Out[5]: 243

In [6]: _i3
Out[6]: '3 ** 5'

In [7]: _3
Out[7]: 243

同时,因在 _iN 中保存的输入历史为字符串,使用 eval(_iN) 即可重新执行指定行中的代码:

In [8]: eval(_i4) # eval('1 + 7*9')
Out[8]: 64

对于在 IPython 中执行过的命令,可通过 %logstart 将之保存在 Python 文件中:

In [9]: %logstart
Activating auto-logging. Current session state plus future input saved.
Filename       : ipython_log.py
Mode           : rotate
Output logging : False
Raw input log  : False
Timestamping   : False
State          : active

该魔术命令会将截止目前输入的命令保存在当前文件夹下的 ipython_log.py 文件中,并将后续执行的命令也会添加进去。当前 ipython_log.py 文件中的内容为:

# IPython log file

2 + 4 / 1.2
_
3 ** 5
1 + 7*9
__
_i3
_3
eval(_i4)
get_ipython().run_line_magic('logstart', '')

3 与操作系统交互

IPython 中可执行系统中的命令,以 ! 开头的命令行后的内容需要在系统 shell 中执行,并且可将执行的结果存放在变量中:

In [22]: !ls
IPython.md                      data_science.md                 pandas.ipynb
Jupyter.ipynb                   README.md

In [23]: markdown_file = '*.md'

In [24]: !ls $markdown_file
IPython.md      README.md       data_science.md

In [25]: markdown = !ls $markdown_file

In [26]: markdown
Out[26]: ['IPython.md', 'README.md', 'data_science.md']

如上例所示,IPython 中执行 ! 开始的系统命令时,还可以执行使用当前环境中的变量 ~ 以 $ 开头。

Tips: 我们同样可以使用「魔术命令」 %alias 为 shell 命令自定义简称 ~ 仅对当前 IPython 会话有效。要永久有效,可在配置文件中进行设定;也可使用 %bookmark 命令来设定常用目录的简写。

4 分析工具

IPython 同样提供了一些代码分析工具,如代码执行时间的分析工具 %time%timeit、基本的性能分析 %prun%run -p 等。

在 Python 代码中,我们可以借助于 time 模块来测算代码运行的时间:

import time

start = time.time()

# do somthing

duration = time.time() - start

而 IPython 中提供了 %time%timeit 两个魔术命令用于简化测算代码运行时间工作:

  • %time:整体执行一次,给出执行时间;
  • %timeit:多次执行,给出平均时间。
In [42]: %time 'foobar'.startswith('foo')
CPU times: user 3 µs, sys: 0 ns, total: 3 µs
Wall time: 5.96 µs
Out[42]: True

In [43]: %time 'foobar'[:3] == 'foo'
CPU times: user 2 µs, sys: 1 µs, total: 3 µs
Wall time: 5.01 µs
Out[43]: True

In [44]: %timeit 'foobar'.startswith('foo')
137 ns ± 0.29 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

In [45]: %timeit 'foobar'[:3] == 'foo'
119 ns ± 0.33 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

使用 %time 运行一次给出运行时间可能会导致一定的偏差;%timeit 以多次运行给出平均时间方式更加精准。

此外,%run -p 命令为 Python 的性能分析工具 cProfile 模块提供了一个 IPython 的接口,在执行一个程序或代码块时,可记录各函数所耗费的时间。

%debug 命令则可调用 IPython 中增强版的 pdb 对上一句执行的命令进行调试。

5 参考资料

  1. McKinney, Wes. Python for data analysis: Data wrangling with Pandas, NumPy, and IPython. " O'Reilly Media, Inc.", 2012.
  2. IPython Docs, https://ipython.readthedocs.io/en/stable/i..., 2019/08/25.
讨论数量: 1

学习了

2周前 评论
MirrorTan (楼主) 2周前

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!