IPython提供了改进的交互式Python Shell,我们可以利用IPython来执行Python语句,并能够立刻看到结果,这一点跟Python自带的shell工具没有什么不同,但是IPython额外提供了很多实用的功能是Python自带的shell所没有的,下面就来看看这些实用的功能吧。
####Tab自动补全 使用过Linux命令行的同学都知道tab自动补全有多实用吧,IPython可以针对之前输入过的变量,对象的方法等进行自动补全。我们只需要输入一部分,就可以看到命名空间中所有相匹配的变量,函数等
这个示例显示了,当输入mylist. 之后按tab键就自动出现的可以使用的method。 tab补全还可以针对文件路径进行补全,例如下面的例子在输入Anaconda之后按tab自动显示路径下的所有可选路径
####内省 在变量的前面或者后面加问号?就可以查询改对象相关的信息(简要信息),有的时候对象的描述信息较多时,需要两个问号??来显示全部信息.
####魔术命令 魔术命令(magic commands)是IPython提供一整套命令,用这些命令可以操作IPython本身,以及提供一些系统功能。魔术命令分为两种:一种是基于行的(line-oriented), 命令只针对一行;另一种是基于单元的(cell-oriented), 命令可以针对多行,均作为其参数。 比如:下面这个%timeit魔术命令就是line-oriented %timeit range(1000) 下面的魔术命令是cell-oriented %%timeit x = numpy.random.rann((100, 100)) numpy.linalg.svd(x) 注:这里timeit只针对svd进行测试,不会针对x变量的赋值做测试。
IPython提供了很多类似的魔术命令,如果你想看都有哪些魔术命令,可以通过%lsmagic来查询,如果想查询某个命令的详细信息,可以通过%cmd?来获取,例如:%run? 另外,默认情况下automagic是ON状态,也就是说对于line-oriented命令我们不需要使用前面的百分号%,直接输入命令即可(例如:timeit range(1000) ),但是对于cell-oriented命令我们必须输入%%,可以通过%automagic来打开/关闭这个automagic功能。
下面仅就常用的魔术命令做下介绍:
%run 命令
该命令可以直接执行python脚本,并输出结果,比如我们有一个python文件如下:
1
2
3
4
5
6# test.py
def main():
print "this is a test."
if __name__ == '__main__':
main()
在IPython中执行如下图:
%paste 和 %cpaste命令
我们经常会将python文件中的代码粘贴到IPython中执行,以便查看效果,尤其是针对现实图形的代码。这时如果直接拷贝粘贴,IPython可能无法正确的执行,这是因为IPython一旦遇到空行就认为粘贴结束,然后就开始执行了。
例如,我们有如下代码:
1
2
3
4
5def add(x, y):
result = x + y
print result
add(1, 2)
如果直接拷贝粘贴到IPython当中,就会报错,如下:
这时我们就需要使用%paste或者%cpaste来粘贴了,先拷贝代码,然后在IPython中输入%paste,结果如下:
%cpaste也可以粘贴代码,与%paste区别就是它可以持续粘贴(即continue paste),直到我们按Ctrl+D或者输入双减号"--"以结束粘贴
%pdb
用以打开/关闭自动pdb唤出功能,当我们打开这个功能的时候(通过%pdb on 或者%pdb 1),程序一旦遇到exception就会自动调用pdb,进入pdb交互界面(如果要关闭该功能可以通过%pdb off 或者%pdb 0)
例如我们有一个test2.py文件如下:
1
2
3
4
5
6
7
8def raise_exception():
var_before_exception = 1
raise Exception("test")
var_after_exception = 2
print var_before_exception
print var_after_exception
raise_exception()
当我们打开pdb开关后,执行如下图所示:
可以发现pdb在raise exception的地方被唤出了。
%edit
用于启动一个编辑器。在Linux上会启动vim,在Windows上会启动notepad。我们可以在编辑器上编辑代码,保存退出后就会执行相应代码。
!cmd
!后可以跟一个shell指令,从而在IPython界面就可以直接执行shell指令而不需要再退出IPython了 例如下面执行一条ping命令:
除上述魔术命令外,IPython还提供了很多其它命令,下表列出了常用的一些命令,如果要查看完整列表,请使用%lsmagic
命令 | 命令说明 |
---|---|
%hist | 查询输入的历史 |
%reset | 清空namespace |
%prun | 使用Python profiler运行python代码。注:profiler是用于测试代码性能的工具 |
%time | 用于显示Python语句的执行时间,包括cpu time和wall clock time |
%timeit | 用于显示Python语句的执行时间,但是这个命令会多次执行相应的语句(可以指定次数)%timeit只针对一行Python语句,如果有多条语句,需要用分号分隔开,同时%%timeit是cell-oriented魔术命令,紧跟在命令后面的语句是作为setup code的,在cell body中的代码才会被timeit多次执行并计算时间 |
%bookmark | 用于存储常用路径 |
%cd | 进入目录命令 |
%env | 显示系统环境变量 |
%pushd dir | 将当前目录入栈,并进入dir指定的目录 |
%popd | 弹出栈顶目录 |
matplotlib集成和pylab模式
IPython在使用matplotlib库生成图形的时候,仍然可以在IPython交互界面输入和操作,这是它比Python shell强大的一个重要功能点,使得我们在做科学计算的时候,可以更好的与数据交互并可视化。而要使用此功能,需要在启动IPython的时候,开启pylab模式,如下 $ipython --pylab
输入和输出
IPython的交互界面提示符分为In和Out,In代表输入并在后面的中括号中带有行号,如: In [2]: Out代表输出,同样也有行号。IPython提供了一下几种快捷方式方便我们操作输入和输出: ● _ 和__: 单下划线_代表上一个输出,双下划线代表上上个输出 ● _iX和_X: X代表行号,_iX代表第X行的输入的字符串,_X代表输出的字符串 ● exec:我们可以利用exec命令来执行历史的输入操作 下图展示了如何利用这些快捷方式更方便的进行输入和输出的操作:
键盘快捷键
IPython提供了类似Linux的快捷键操作方式,可以方便我们的命令操作
快捷键 | 说明 |
---|---|
Ctrl + A | 光标移到行首 |
Ctrl + E | 光标移到行尾 |
Ctrl + K | 删除从光标开始到行尾的字符 |
Ctrl + U | 删除从光标开始到行首的字符 |
Ctrl + R | 搜索匹配的历史命令 |
Ctrl + P或上箭头 | 搜索之前的历史命令 |
Ctrl + N或下箭头 | 搜索之后的历史命令 |
Ctrl + L | 清屏 |
总而言之,IPython为我们提供了很多强大的功能,本篇文章只是简要概述了下IPython的强大之处,还有很多有待大家自己去探索,尤其值得一提的是IPython还提供了notebook功能,也非常强大,由于篇幅所限,大家可以自己在网上搜索相关文章来参考。