人海茫茫
相识真好

python开发者必备,史上最详细的 ipython 教程——第二篇

python开发者必备,史上最详细的 ipython 教程——第二篇

送你小心心记得关注我哦!!

python开发者必备,史上最详细的 ipython 教程——第二篇

python开发者必备,史上最详细的 ipython 教程——第二篇

进入正文

python开发者必备,史上最详细的 ipython 教程——第二篇

全文摘要

ipython到底有什么用,上一篇文章中讲到了ipython的基础应用、优良特性、自动补全、内省、魔术命令的基础知识,本文将继续在此基础之上,对ipython进行进阶,包括qtconsole的使用、与matplotlib的集成、与操作系统进行交互等较为高级的内容。本文是系列文章第二期,后面会继续跟进,欢迎继续关注。本文较长,阅读时间约30min。

python开发者必备,史上最详细的 ipython 教程——第二篇


ipython教程——系列二

声明:本文承接前面一篇文章,ipython系列之一;另外,本文所指的ipython不是ipython notebook,ipython notebook已经被jupyter notebook所取代,不再叫ipython notebook了。

前面讲解了ipython里面的一些核心知识点,包括它的优势所在、快捷键操作、内省、什么是魔术命令等等,本文将在前文的基础之上,进一步拓展,讲解ipython的进阶知识点。

上一篇文章参见:python开发者必备,史上最详细的 ipython 教程——第一篇

python开发者必备,史上最详细的 ipython 教程——第二篇

01

ipython与matplotlib集成

关于matplotlib的强大之处,这里不再说明,想要知道matplotlib的体系架构和绘图方法,可以参见我的另外两篇文章:

matplotlib高级绘图——路径和形状

matplotlib教程——matplotlib与tkinter集成

深入详解matplotlib画图进阶

我们先通过一个简单的例子来说明,我需要使用ipython画一个简单图形,如果直接打开ipython,然后绘制,代码如下:

In [1]: import matplotlib.pyplot as plt

In [2]: x=[1,2,3,4,5]

In [3]: y=[2,4,6,8,10]

In [4]: plt.plot(x,y)
Out[4]: [<matplotlib.lines.Line2D at 0x24a6558e438>]

In [5]: plt.show()

然后会打开下面的一个图像,如下:

python开发者必备,史上最详细的 ipython 教程——第二篇

但是,会出现一个问题,这个时候我如果想要继续在ipython里面输入其他的语句或者是执行其他的命令,没办法执行了,这是因为matplotlib的GUI时间循环接管了ipython的控制权,只有关闭了GUI窗口,才能够继续进行操作。这种阻塞式的问题极大地影响了交互体验,那怎么办呢?

我们不要直接启动在菜单中启动ipython,而是通过输入cmd命令,然后通过命令 ipython –pylab 这句话启动ipython,通过添加参数–pylab就可以解决上面的阻塞问题了,现在当我们再次输入上面的代码,发现及时GUI没有关闭,我们依然可以在ipython中进行交互,这是非常方便的。

–pylab 参数有以下两个方面的好处:

(1)ipython会默认启动后台的GUI,这样就不需要plt.show()这一句话,在plot绘图函数后面直接回车,就可以显示图片了

(2)GUI不会对ipython造成任何阻塞,不会影响交互


注意,我们还可以通过魔法命令%gui,选择合适的画图后端引擎,一般格式为 %gui guiname,如下所示:

 %gui wx      # enable wxPython event loop integration
 %gui qt4|qt  # enable PyQt4 event loop integration
 %gui qt5     # enable PyQt5 event loop integration
 %gui gtk     # enable PyGTK event loop integration
 %gui gtk3    # enable Gtk3 event loop integration
 %gui tk      # enable Tk event loop integration
 %gui osx     # enable Cocoa event loop integration
                 # (requires %matplotlib 1.1)
 %gui         # disable all event loop integration


关于后端画图引擎,还有一个魔术命令 %matplotlib 可以使用,常见的如下:

(1)%matplotlib   #显示当前使用后端

Using matplotlib backend: TkAgg

 (2)%matplotlib –list  或者是 -l   #显示有哪些后端可以使用

 Available matplotlib backends: [‘osx’, ‘qt4’, ‘qt5’, ‘gtk3’, ‘notebook’, ‘wx’, ‘qt’, ‘nbagg’,’gtk’, ‘tk’, ‘inline’]

 (3)%matplotlib inline   #这是在jupyter notebook中使用的,让jupyter与matplotlib集成,这种情况下,默认使用的是TkAgg后端

但是上面的方式依然有一个问题,那就是ipython窗口与matplotlib窗口并没有放在一起,虽然他们不再有阻塞,但是依然影响更加舒适的交互体验,因为ipython程序是一个和用户终端有点类似的黑色的窗体(实际上我们可以修改它的主题),如果能够将matplotlib所化的图形就放在ipython里面多好,这样就不会出现多个窗体程序了,我们有几种方式实现:

(1)通过第三方的相关库,是完全可以将matplotlib放在ipython里面的,

(2)通过另一种形式——jupyter qtconsole来实现这样的目的


02

jupyter qtconsole

jupyter qtconsole的前身叫做ipython qtconsole,同ipython notebook一样,后面改成了jupyter,至于什么是jupyter,下一篇文章会专门介绍到jupyter notebook的使用。

jupyter qtconsole 是ipython团队基于qt框架开发的一个GUI控制台,但是这个“控制台”很特殊,它具有富文本编辑功能,既能够在里面实现内嵌图片、多行编辑、语法高亮等这样的“富文本功能。关于qtconsole的安装和启动这些基础知识,这里就不在介绍了。

我们在qtconsole里面输入如下代码:会得到直接的一个结果如下所示:

python开发者必备,史上最详细的 ipython 教程——第二篇

我们发现,所化的图像直接就显示在了qtconsole里面,不需要我设置什么其他的,这是多么的人性化,这样的功能对于编写一个大型软件,使用qtconsole进行小模块的测试和试验,是特别有帮助的,这就是qtconsole的简单强大之处。

现在可以回答什么是qtconsole了???

它是一个具有菜单富文本编辑的控制台,ipython具有的功能(tab自动补全、语法高亮、内省、魔术命令等等),它都有,它是ipython的进一步改进版。

注意:上面的操作是基于新版本的jupyter qtconsole,它默认就已经将matplotlib集成到了qtconsole一起了,但是对于老版本的ipython qtconsole,并没有,因此不能直接打开ipython qtconsole,而是要在cmd中使用命令ipython qtconsole –pylab=inline 进行打开才行。


03

命令历史记录与输入输出

1、所谓的命令历史主要是上一篇文章中已经讲到的两个快捷键的使用,即Ctrl+PCtrl+N。还可以使用%hist魔术方法。

2、所谓的输入与输出主要是使用 _、__、_X、_iX这里的X表示行号,在前面也已经讲过,这里就不重复了。

关于这二者的使用,可以参见上一篇文章:



04

ipython与操作系统的交互

ipython与操作系统的shell是联系的非常紧密的,我们可以直接在ipython中就实现在操作系统的shell中所做的事情,包括执行shell命令、更改目录、为shell提供别名、创建目录书签、将shell执行的结果保存在python的对象中 等等操作,下面进行一些常见的实例。

4 ipython与操作系统交互
4.1 ipython与cmd的转化


在ipython中输入 :!cmd 

在ipython中打开系统的cmd。这就相当于现在ipython已经变成了系统自带的cmd,若要回到ipython界面,可以再输入ipython,这就相当于在cmd中启动ipython

4 ipython与操作系统交互
4.2 ipython中常见的魔术命令


%pwd :返回当前ipython的工作目录

 %cd newdirectory: 进入新的工作目录

 %dhist  :打印目录访问的历史

 %env :以dict的形式返回系统的环境变量

如下:

In [1]: %pwd
Out[1]: 'D:\ProgramData\Anaconda3\envs\tensorflow\Scripts'

In [2]: %cd C:UsersXinAirDesktop
C:UsersXinAirDesktop

In [3]: %dhist
Directory history (kept in _dh)
0: D:ProgramDataAnaconda3envstensorflowScripts
1: C:UsersXinAirDesktop

注意:所谓的ipython与系统自带的shell是集成的,主要是体现在两个方面

(1):我可以在ipython里面用魔术命令的方式达到在shell中执行系统命令的效果,比如上面的例子,返回当前的工作目录,进入新的从做目录等操作,这些操作本来是在shell中完成,但是我在ipython中通过魔术命令依然可以完成。

(2)在ipython中我也可以直接使用系统shell的命令,只不过需要在原来的shell命令前面加上一个感叹号!,这就是为什么

!cmd 就会打开系统shell的原因了,比如我可以在ipython中查看本机的IP地址,执行 !ipconfig。因为window系统中查看IP地址的shell命令就是ipconfig,在ipython中只需要在系统shell命令前面加上一个感叹号!就可以了。



再比如,我们都知道在windows下面,执行shell命令notepad会打开一个记事本,同样,如果我们在ipython中输入 

!notepad ,发现,也会打开一个记事本。


这两个方面的区别在于,第一种方法是通过魔术方法完成,但是,并不是所有的系统shell命令都会有一个魔术方法与之对应,魔术方法只定义了一些常见的shell命令,但是第二种方法,只要使用 !shell_command均可以。


4 ipython与操作系统交互
4.3 ipython为系统的shell命令定义别名


根据上面的说法,也就说很多系统shell命令并没有与之对应的魔术方法,那怎么办呢?我们可以给系统shell命令定义一个别名,然后在使用魔术方法实现。定义别名的方法为:

%alias  new_name shell_command

%alias是一个魔术方法 ,new_name是人为的起的别名,shell_command是系统的shell命令的名称,比如我给系统shellnotepad定一个别名abcd,如下:

%alias abcd notepad

然后执行%abcd就可以打开一个记事本了,如下:

In [4]: %alias abcd notepad

In [5]: %abcd


再举个例子,在windows系统中,输入shell命令 calc会打开一个计算器应用程序,我们也可以在ipython中给它定义一个别名,如下:

In [8]: %alias xyz calc

In [9]: %xyz

这样也会打开一个计算器。


总结:ipython与系统shell交互的两种方式如下所示:

python开发者必备,史上最详细的 ipython 教程——第二篇


4 ipython与操作系统交互
4.4 ipython的目录书签系统

所谓的书签系统就是,给经常使用的目录起一个别名,以便实现快速跳转。格式为:

%bookmark 书签名 文件目录

其中%bookmark是魔术命令。

比如,我有一个常见的经常使用的目录,D:ProgramDataAnaconda3envstensorflowScripts

要在ipython中进入这个目录我可以这么办  %cd D:ProgramDataAnaconda3envstensorflowScripts,但是如果要经常进入这个目录就很麻烦,因为需要输入很多字母,现在我给他起一个书签名,如下:

In [10]: %bookmark mydir D:ProgramDataAnaconda3envstensorflowScripts

In [11]: %cd mydir
(bookmark:mydir) -> D:ProgramDataAnaconda3envstensorflowScripts
D:ProgramDataAnaconda3envstensorflowScripts

给这个目录起一个书签名称mydir,然后通过别名进入到指定的目录,由此可见这种方式对于经常使用的目录,非常有帮助。


05

ipython的高级功能


ipython的功能当然远远不止于此,他还有更加高级的功能,包括日志处理、代码调试、性能分析、自定义主题显示、甚至是自定义魔术命令等等方面的问题,后面的文章会继续分析跟进。下一篇会介绍到关于jupyter notebook的详细使用教程。


往期回顾
python开发者必备,史上最详细的 ipython 教程——第一篇

matplotlib高级绘图——路径和形状

深入详解matplotlib画图进阶

matplotlib教程——matplotlib与tkinter集成


python开发者必备,史上最详细的 ipython 教程——第二篇

2018/11/22

Thursday

小伙伴们,学到了吗?希望这篇ipython系列教程之二对你的Python开发有所帮助哦,本文所涉及到的内容都是非常实用的干货哦,后面的文章还会继续讲解关于jupyter notebook的详细使用教程,有兴趣的可以持续关注一下。正所谓工欲善其事必先利其器,一定要好好学啊。后面会有更多面经等着大家哦,有兴趣的小伙伴请持续关注!

python开发者必备,史上最详细的 ipython 教程——第二篇



python开发者必备,史上最详细的 ipython 教程——第二篇



python开发者必备,史上最详细的 ipython 教程——第二篇


python开发者必备,史上最详细的 ipython 教程——第二篇


python开发者必备,史上最详细的 ipython 教程——第二篇


python开发者必备,史上最详细的 ipython 教程——第二篇


python开发者必备,史上最详细的 ipython 教程——第二篇

赞(0) 打赏
未经允许不得转载:老康的学习空间 » python开发者必备,史上最详细的 ipython 教程——第二篇

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏