![Python从入门到精通(微课精编版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/674/47216674/b_47216674.jpg)
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所示。
![](https://epubservercos.yuewen.com/29DD51/26581157409139606/epubprivate/OEBPS/Images/Figure-P29_2912.jpg?sign=1739286299-AakUU0wuQvThEkLCGydhhwYh4i1j3wRr-0-a3abf1012ea63f628e826301182e95d6)
图1.23 启动IPython
![](https://epubservercos.yuewen.com/29DD51/26581157409139606/epubprivate/OEBPS/Images/Figure-P29_2915.jpg?sign=1739286299-YDmxRHlKmTVgs1aC6MKqPFuCzsq3P27m-0-b95848faaa2aeab72e747c2e624220c8)
图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所示。
![](https://epubservercos.yuewen.com/29DD51/26581157409139606/epubprivate/OEBPS/Images/Figure-P30_2926.jpg?sign=1739286299-K50aE7YKASXRSyQ9gziZRxMjL7rVbfhN-0-01138adbcc3dfe24714d5238ca553dc8)
图1.25 Tab键自动补全
![](https://epubservercos.yuewen.com/29DD51/26581157409139606/epubprivate/OEBPS/Images/Figure-P30_2929.jpg?sign=1739286299-JptlMuRkhrkECMIJOalH3TvOxVJfhoU3-0-b56b8a8ee535055bf5d296f7be6a7041)
图1.26 对象内省
第4步,如果对象是一个函数或者实例方法,则它的docstring(文档字符串)也会被显示出来,如图1.27所示。
第5步,如果使用两个问号(??),还可以显示该方法的源代码,如图1.28所示。
![](https://epubservercos.yuewen.com/29DD51/26581157409139606/epubprivate/OEBPS/Images/Figure-P30_2933.jpg?sign=1739286299-sahtYkRVCRGuoMIqNTJPyqCI07S1BHyp-0-8252f82498d64a1d8223f0e7cdd03820)
图1.27 显示docstring信息
![](https://epubservercos.yuewen.com/29DD51/26581157409139606/epubprivate/OEBPS/Images/Figure-P30_2936.jpg?sign=1739286299-Twg2OiB3q7qiUFhfIgvBIyofrYJMRqVd-0-b4026045bc470492899da2c2efb3d113)
图1.28 显示源代码
第6步,使用通配符字符串可以查找所有与该通配符字符串相匹配的名称。例如,查找re模块中所有包含find的函数,如图1.29所示。
第7步,使用hist或者history命令可以查看历史输入。如果在hist命令之后加上-n,也可以显示输入的序号,如图1.30所示。
![](https://epubservercos.yuewen.com/29DD51/26581157409139606/epubprivate/OEBPS/Images/Figure-P30_2940.jpg?sign=1739286299-LQTiVQCWUWVW2cxGM3ngwcOu5GoPKI8E-0-1001bcfdf0a4572d113fa5c5aee02544)
图1.29 使用通配符进行查找
![](https://epubservercos.yuewen.com/29DD51/26581157409139606/epubprivate/OEBPS/Images/Figure-P30_2943.jpg?sign=1739286299-Z4sSlwMk9Lo41vczVvZkoxHuchh5lSPJ-0-f04dff64c89a2f1e05dc75e02de2210f)
图1.30 显示历史输入
提示:在任何的交互会话中,用户的输入历史和输出历史都被保存在In和Out变量中,并被序号进行索引。另外,_、__、___和_i、_ii、_iii变量保存着最后三次输出和输入对象。_n和_in(n表示具体的数字)变量返回第n个输出和输入的历史命令,如图1.31所示。
第8步,使用run命令运行外部Python程序,输入格式为:run路径+Python文件名称,如图1.32所示运行上一节创建的示例test1.py。
![](https://epubservercos.yuewen.com/29DD51/26581157409139606/epubprivate/OEBPS/Images/Figure-P31_2971.jpg?sign=1739286299-FB7zbc5gNCNQR8jBteZwbb1XMKHkHyjI-0-7561d85541d900d31dcd911fa31d6310)
图1.31 显示具体的输入和输出
![](https://epubservercos.yuewen.com/29DD51/26581157409139606/epubprivate/OEBPS/Images/Figure-P31_2972.jpg?sign=1739286299-mq3fYNSDVKnZp3zI2Te6BKmXwbDjGOpp-0-5165f40784a6d5a30660983d36d2ced5)
图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的简单强大之处。
![](https://epubservercos.yuewen.com/29DD51/26581157409139606/epubprivate/OEBPS/Images/Figure-P32_75895.jpg?sign=1739286299-kgFn5MBNsnCPPTaUkw8kYG9ZbIfiUEsI-0-b385a845b4510b0f3c5bd05f7e4159db)
图1.33 直接绘图
注意:上面的操作是基于新版本的Jupyter QtConsole,默认已经将matplotlib集成到QtConsole中,但是对于老版本的IPython QtConsole,并没有集成,因此不能直接打开IPython QtConsole,而是要在cmd中使用命令ipython qtconsole --pylab=inline来打开才行。