2.2 增强的Python控制台功能

上一节从Shell的角度看了IPython的功能,这一节我们从Python控制台的角度来看看。

2.2.1 输入历史%hist

IPython会保存所有的输入历史,甚至包括历史会话的。由于随着时间的推移,历史列表会愈来愈庞大,IPython中有方便的机制可以轻松访问输入历史。

最基本的当然是按上下键;如果已经输入几个字符,那么上下键还会匹配已输入的开头。

%hist(%history的别名)命令接受不同的选项,可显示输入历史的不同部分。比如:

# history of line 2 - line 5
%hist 2-5

# line 4 - line 8 of session 201
%hist 201/4-8

# line 7 of previous session
%hist ~1/7

# save to a file
%hist -f filename

还有一个相关的命令是%store,可以将任意的Python变量保存下来,供日后之用。

# save var name
%store name

# delete var name
%store -d name

# recover
%store -r

2.2.2 Python代码的导入导出

导入代码

最简单的情形是复制粘贴之时,特别是对于很多StackOverflow的搬运工而言:)%paste是这些人的福音。

接下来是%run命令,可执行指定的脚步文件。默认情况下,被执行脚本执行于一个空命名空间,这意味着当前定义在控制台的命名空间对脚本来说是不可见的;可通过-i选项来改变这一行为。另外,脚本文件执行完毕后,其中定义的变量在控制台是可见的,这对于调试是很方便的。

import sys
import os

folder = './social/facebook'
if len(sys.argv) > 1:
    folder = sys.argv[1]

files = os.listdir(folder)
ids = sorted(set(map(lambda f: int(f.split('.')[0]), files)))

导出代码

%edit做的事情与%run相反,会打开一个编辑器让我们输入代码。更现代和强大的方式是使用IPython Notebook,很快你就会看到。

2.2.3 动态内省(Dynamic introspection)

  • Tab自动补全
  • 源代码内省:IPython可以显示变量的内部信息,包括源代码。使用?可以查看一个对象的帮助信息,??则可以查看更详细的信息,如果函数定义在文件中,还可以查看它的源代码。此外,还有%psource、%pfile、%pdoc和%pdef等。

2.2.4 交互式调试器

%run -d
%run -d -b29 script.py

ipython --pdb

2.2.5 基准测试

%timeit py_statement

%run -t scripty.py

分析脚本性能

%run -p script.py

对于逐行的分析器,建议了解下line_profiler