1.5 使用IPython
1.5.1 认识IPython
IPython是一个Python的交互式shell,比默认的Python shell更好用,支持变量自动补全、自动缩进,支持bash shell命令,内置很多有用的功能和函数。IPython能够帮助用户以一种更高的效率使用Python,同时也是利用Python进行科学计算和交互可视化的一个最佳的平台。
IPython提供了两个主要的组件,具体如下。
➢ 一个强大的Python交互式shell。
➢ 供Jupyter Notebook使用的一个Jupyter内核(IPython Notebook)。
IPython的主要功能如下。
➢ 运行Ipython控制台。
➢ 使用Ipython作为系统shell。
➢ 使用历史输入(history)。
➢ Tab补全。
➢ 使用%run命令运行脚本。
➢ 使用%timeit命令快速测量时间。
➢ 使用%pdb命令快速debug(程序除错)。
➢ 使用pylab进行交互计算。
➢ 使用IPython Notebook。
1.5.2 安装IPython
IPython支持Python 2.7版本,或者Python 3.3以上的版本。安装Ipython很简单,直接使用pip管理工具即可。在cmd命令行等终端输入下面命令,然后按Enter键即可。
>pip install ipython
这条命令自动安装IPython以及它的各种依赖包。
如果想在Notebook或QtConsole中使用IPython,还需要安装Jupyter,命令如下:
>pip install jupyter
如果已安装Anaconda,则默认自动安装IPython。
1.5.3 启动IPython
启动IPython的方法:打开命令对话框(快捷键为Windows+R),然后输入ipython命令,单击"确定"按钮之后,即可进入IPython shell交互界面。也可以在cmd命令行等终端下输入ipython命令直接进入IPython shell交互界面,如图1.23所示。
在命令对话框或者cmd命令行等终端下输入ipython qtconsole命令,启动Jupyter QtConsole,可以进入IPython图形交互界面,如图1.24所示。
图1.23 启动IPython
图1.24 启动Jupyter QtConsole
1.5.4 在IPython中编写代码
IPython支持所有Python的标准输入输出,也就是在IDLE或Python shell中能用的,在IPython中都能够使用,唯一不同之处就是IPython使用In [x]和Out [x]表示输入、输出,并表示相应的序号。实际上,In和Out是两个保存历史信息的变量。
IPython有很多Python交互没有的功能,如Tab补全、对象自省、强大的历史机制、内嵌的源代码编辑、集成Python调试器、断点调试等。
第1步,在命令提示符后面输入:x = [1,2,3],然后按Enter键换行。
第2步,输入变量x,然后按Tab键,则会提示与输入的字符串相匹配的变量,如对象或者函数等,通过键盘方向键找到需要的对象,如图1.25所示。
第3步,在变量的前面或者后面加上一个问号(?),然后按Enter键,就可以将有关该对象的一些通用信息显示出来,这就是对象内省,如图1.26所示。
图1.25 Tab键自动补全
图1.26 对象内省
第4步,如果对象是一个函数或者实例方法,则它的docstring(文档字符串)也会被显示出来,如图1.27所示。
第5步,如果使用两个问号(??),还可以显示该方法的源代码,如图1.28所示。
图1.27 显示docstring信息
图1.28 显示源代码
第6步,使用通配符字符串可以查找所有与该通配符字符串相匹配的名称。例如,查找re模块中所有包含find的函数,如图1.29所示。
第7步,使用hist或者history命令可以查看历史输入。如果在hist命令之后加上-n,也可以显示输入的序号,如图1.30所示。
图1.29 使用通配符进行查找
图1.30 显示历史输入
提示:在任何的交互会话中,用户的输入历史和输出历史都被保存在In和Out变量中,并被序号进行索引。另外,_、__、___和_i、_ii、_iii变量保存着最后三次输出和输入对象。_n和_in(n表示具体的数字)变量返回第n个输出和输入的历史命令,如图1.31所示。
第8步,使用run命令运行外部Python程序,输入格式为:run路径+Python文件名称,如图1.32所示运行上一节创建的示例test1.py。
图1.31 显示具体的输入和输出
图1.32 运行外部Python程序
提示:IPython常用魔术命令如下。
➢ %magic:显示所有魔术命令的详细文档。
➢ %hist:打印命令的输入(可选输出)历史。
➢ %time statement:报告statement的执行时间。
➢ %timeit statement:多次执行statement以计算系统平均运行时间。
➢ %reset:删除全部变量。
➢ %xdel variable:删除variable,并尝试清除其在IPython中对象的一切引用。
➢ %cd directory:将系统工作目录更改成directory。
➢ %pwd:返回系统的当前工作目录。
➢ %env:以dict形式返回系统环境变量。
➢ %bookmark:使用IPython目录书签系统。
➢ %paste:可以承载剪贴板中的一切文本,并在shell中以整体形式执行。
➢ %cpaste:与%paste功能类似,只是多了一个用于粘贴代码的特殊提示符。
➢ %run script.py:所有文件都可以通过%run命令当作Python程序来运行。
IPython标准键盘快捷键如下。
➢ 向上方向键:向后搜索历史命令。
➢ 向下方向键:向前搜索历史命令。
➢ Ctrl+R:部分增量搜索。
➢ Ctrl+C:终止当前正在执行的代码。
➢ Ctrl+A:将光标移动到行首。
➢ Ctrl+E:将光标移动到行尾。
➢ Ctrl+K:删除从光标开始至行尾的文本。
➢ Ctrl+U:清除当前行的所有文本。
➢ Ctrl+L:清屏。
1.5.5 使用Jupyter QtConsole
Jupyter QtConsole的前身叫作IPython QtConsole,与IPython Notebook一样,后来改成了Jupyter,Jupyter QtConsole是IPython团队基于Qt框架开发的一个GUI控制台,但是这个控制台很特殊,它具有富文本编辑功能,即能够在里面实现内嵌图片、多行编辑、语法高亮等富文本功能。QtConsole是一个具有菜单的富文本编辑的控制台,IPython具有的功能它都有,它是IPython的进一步改进版。
例如,在QtConsole里面输入如下代码,直接得到一个结果,如图1.33所示。
import matplotlib.pyplot as plt x=[1,2,3,4,5] y=[2,4,6,8,10] plt.plot(x,y)
通过图1.33可以看到,代码所绘制的图像直接显示在QtConsole里面,不需要设置,非常人性化。这样的功能对于编写一个大型软件,使用QtConsole进行小模块的测试和试验,是特别有帮助的,这就是QtConsole的简单强大之处。
图1.33 直接绘图
注意:上面的操作是基于新版本的Jupyter QtConsole,默认已经将matplotlib集成到QtConsole中,但是对于老版本的IPython QtConsole,并没有集成,因此不能直接打开IPython QtConsole,而是要在cmd中使用命令ipython qtconsole --pylab=inline来打开才行。