ipython与python的区别

ipython与python的区别

IPython的开发者吸收了标准解释器的基本概念,在此基础上进行了大量的改进,创造出一个令人惊奇的工具。在它的主页上是这么说的:“这是一个增强的交互式Pythonshell。”具有tab补全,对象自省,强大的历史机制,内嵌的源代码编辑,集成Python调试器,%run机制,宏,创建多个环境以及调用系统shell的能力。

1)IPython与标准Python的最大区别在于,Ipython会对命令提示符的每一行进行编号。如下图:
ipython与python的区别_第1张图片

ipython与python的区别_第2张图片
对比两个例子,其输出变量值似乎相同,其实仍有差别。print语句使用非正式的(unofficial)字符串表达式,而简单变量名(barevariablename)使用了正式的(official)字符串表达式。在处理自定义类而不是内置类时,这种差异会体现得非常明显。
In [10]: classDoubleRep(object):  
....: def__str__(self):  
....: return'Hi, I'm a __str__'  
....: def__repr__(self):  
....: return'Hi, I'm a __repr__'  
....: 
....: 
In [11]: dr =DoubleRep()  
In [12]: printdr  
Hi, I'm a__str__  
In [13]: dr 
Out[13]: Hi,I'm a __repr__ 

2)tab补全
作为例子,我们先引入 sys 模块,之后再输入 sys. (注意有个点),此时按下 tab 键,IPython 会列出所有 sys模块下的方法和属性。
ipython与python的区别_第3张图片
接着上面的例子,我们输入 sys?再回车,这样会显示出 sys模块的 docstring及相关信息。很多时候这个也是很方便的功能。
ipython与python的区别_第4张图片

3) 历史机
hist可以快速查看那些输入的历史记录。
hist-n可以快速查看并去掉历史记录中的序号,这样你就可以方便的将代码复制到一个文本编辑器中。
一个更简单的方法是edit加Python列表的切片(slice)语法:
edit 4:7 %将第4,5,6,7句代码导出到编辑器

4) 断点调试:如果你的程序是由命令行开始执行的,即在命令行下输入python foo.py(大部分 Python 程序都是),那么你还可以利用 IPython在你的程序任意地方进行断点调试。
在你程序中任意地方,加入如下语句:
fromIPython.Shell import IPShellEmbed
IPShellEmbed([])()
注意:最近 IPython发布了 0.11 版本,各方面变化都非常大,API 也经过了重新设计。如果你使用的是 0.11那么上面两行对应的是这样的:
from IPythonimport embed
embed()
再和平常一样运行你的程序,你会发现在程序运行到插入语句的地方时,会转到 IPython环境下。你可以试试运行些指令,就会发现此刻 IPython的环境就是在程序的那个位置。你可以逐个浏览当前状态下的各个变量,调用各种函数,输出你感兴趣的值来帮助调试。之后你可以照常退出IPython,然后程序会继续运行下去,自然地你在当时 IPython下执行的语句也会对程序接下来的运行造成影响。
这个方法是在这里(http://lukeplant.me.uk/blog/posts/exploratory-programming-with-ipython/ )看到的。想象一下,这样做就像让高速运转的程序暂停下来,你再对运行中的程序进行检查和修改,之后再让他继续运行下去。这里举一个例子,比如编写网页bot,你在每取回一个页面后你都得看看它的内容,再尝试如何处理他获得下一个页面的地址。运用这个技巧,你可以在取回页面后让程序中断,再那里实验各种处理方法,在找到正确的处理方式后写回到你的代码中,再进行下一步。这种工作流程只有像 Python这种动态语言才可以做到。

你可能感兴趣的:(程序人生)