为什么要使用IPython?

IPython提供了改进的交互式Python Shell,我们可以利用IPython来执行Python语句,并能够立刻看到结果,这一点跟Python自带的shell工具没有什么不同,但是IPython额外提供了很多实用的功能是Python自带的shell所没有的,下面就来看看这些实用的功能吧。

Tab自动补全

使用过Linux命令行的同学都知道tab自动补全有多实用吧,IPython可以针对之前输入过的变量,对象的方法等进行自动补全。我们只需要输入一部分,就可以看到命名空间中所有相匹配的变量,函数等

1.JPG

这个示例显示了,当输入mylist. 之后按tab键就自动出现的可以使用的method。
tab补全还可以针对文件路径进行补全,例如下面的例子在输入Anaconda之后按tab自动显示路径下的所有可选路径

2.JPG

内省

在变量的前面或者后面加问号?就可以查询改对象相关的信息(简要信息),有的时候对象的描述信息较多时,需要两个问号??来显示全部信息.

3.JPG

魔术命令

魔术命令(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文件如下:

# test.py
def main():
    print "this is a test."

if __name__ == '__main__':
    main()

在IPython中执行如下图:

run.JPG
%paste 和 %cpaste命令

我们经常会将python文件中的代码粘贴到IPython中执行,以便查看效果,尤其是针对现实图形的代码。这时如果直接拷贝粘贴,IPython可能无法正确的执行,这是因为IPython一旦遇到空行就认为粘贴结束,然后就开始执行了。
例如,我们有如下代码:

def add(x, y):
    result = x + y
    print result

add(1, 2)

如果直接拷贝粘贴到IPython当中,就会报错,如下:

paste.JPG

这时我们就需要使用%paste或者%cpaste来粘贴了,先拷贝代码,然后在IPython中输入%paste,结果如下:

paste_cmd.JPG

%cpaste也可以粘贴代码,与%paste区别就是它可以持续粘贴(即continue paste),直到我们按Ctrl+D或者输入双减号"--"以结束粘贴

%pdb

用以打开/关闭自动pdb唤出功能,当我们打开这个功能的时候(通过%pdb on 或者%pdb 1),程序一旦遇到exception就会自动调用pdb,进入pdb交互界面(如果要关闭该功能可以通过%pdb off 或者%pdb 0)
例如我们有一个test2.py文件如下:

def 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.JPG

可以发现pdb在raise exception的地方被唤出了。

%edit

用于启动一个编辑器。在Linux上会启动vim,在Windows上会启动notepad。我们可以在编辑器上编辑代码,保存退出后就会执行相应代码。

!cmd

!后可以跟一个shell指令,从而在IPython界面就可以直接执行shell指令而不需要再退出IPython了
例如下面执行一条ping命令:

ping.JPG

除上述魔术命令外,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命令来执行历史的输入操作
下图展示了如何利用这些快捷方式更方便的进行输入和输出的操作:

inout.JPG

键盘快捷键

IPython提供了类似Linux的快捷键操作方式,可以方便我们的命令操作

快捷键 说明
Ctrl + A 光标移到行首
Ctrl + E 光标移到行尾
Ctrl + K 删除从光标开始到行尾的字符
Ctrl + U 删除从光标开始到行首的字符
Ctrl + R 搜索匹配的历史命令
Ctrl + P或上箭头 搜索之前的历史命令
Ctrl + N或下箭头 搜索之后的历史命令
Ctrl + L 清屏

总而言之,IPython为我们提供了很多强大的功能,本篇文章只是简要概述了下IPython的强大之处,还有很多有待大家自己去探索,尤其值得一提的是IPython还提供了notebook功能,也非常强大,由于篇幅所限,大家可以自己在网上搜索相关文章来参考。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,377评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,390评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,967评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,344评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,441评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,492评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,497评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,274评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,732评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,008评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,184评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,837评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,520评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,156评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,407评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,056评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,074评论 2 352

推荐阅读更多精彩内容