ipython是一个python的交互式shell,比默认的python shell好用得多,支持变量自动补全,自动缩进,支持bash shell命令,内置了许多很有用的功能和函数。学习ipython将会让我们以一种更高的效率来使用python。同时它也是利用Python进行科学计算和交互可视化的一个最佳的平台。

IPython提供了两个主要的组件:

1.一个强大的python交互式shell 
2.供Jupyter notebooks使用的一个Jupyter内核(IPython notebook)

IPython的主要功能如下:

1.运行ipython控制台 
2.使用ipython作为系统shell 
3.使用历史输入(history) 
4.Tab补全 
5.使用%run命令运行脚本 
6.使用%timeit命令快速测量时间 
7.使用%pdb命令快速debug 
8.使用pylab进行交互计算 
9.使用IPython Notebook

2. 安装IPython

ipython支持Python2.7版本或者3.3以上的版本,我用的是windows下的python 3.4版本。

安装ipython很简单,可以直接使用pip管理工具即可:

pip install ipython
  • 1

这条命令会自动安装IPython以及它的各种依赖包

如果我们也想在notebook中或者在Qt console中使用IPython,我们还需要安装Jupyter,如下命令:

pip install jupyter
  • 1

另外我们还可能需要安装一些用到的库:

NumPy高性能多维数组矢量运算库:

pip install numpy
  • 1

Matplotlib绘图以及交互式可视化:

pip install matplotlib
  • 1

等等。

  搜索887934385交流群,进入后下载资料工具安装包等。

3. 交互式使用IPython

IPython支持所有python的标准输入输出,也就是我们在IDLE中或者Python shell中能用的,在IPython中都能够使用,唯一的不同之处使ipython会使用In [x]Out [x]表示输入输出,并表示出相应的序号。

其实后面我们会知道,In和Out是两个保存历史信息的变量

进入IPython也非常简单,直接win + R打开运行,然后输入ipython即可进入IPython shell交互框;

或者输入ipython qtconsole进入ipython图形交互界面:

除此之外,ipython支持一些更高级的功能。

3.1 Tab键自动补全

在shell中输入表达式时,只要按下Tab键,当前命名空间中任何与输入的字符串相匹配的变量(对象或者函数等)就会被找出来:

这时可以通过键盘的向下翻页键找到自己需要的对象。

3.2 内省

在变量的前面或者后面加上一个问号?,就可以将有关该对象的一些通用信息显示出来,这就叫做对象的内省。

如果对象是一个函数或者实例方法,则它的docstring也会被显示出来:

定义方法如下:

这时查看该方法的内省信息:

如果使用两个问号??,那么还可以显示出该方法的源代码:

另外,我们可以使用通配符字符串查找出所有与该通配符字符串相匹配的名称,比如我们查找re模块下所有的包含find的函数:

3.3 使用历史命令history

在IPython shell中,使用历史命令可以简单地使用上下翻页键即可,另外我们也可以使用hist命令(或者history命令)查看所有的历史输入。(正确的做法是使用%hist,在这里,%hist也是一个魔法命令)

如果在hist命令之后加上-n,即hist -n也可以显示出输入的序号:

在任何的交互会话中,我们的输入历史和输出历史都会被保存在InOut变量中,并被序号进行索引。

另外,_______i_ii_iii变量保存着最后三个输出和输入对象。_n_in(这里的n表示具体的数字)变量返回第n个输出和输入的历史命令。比如:

3.4 使用%run命令运行脚本

在ipython会话环境中,所有文件都可以通过%run命令当做Python程序来运行,输入%run 路径+python文件名称即可

3.5 使用%timeit命令快速测量代码运行时间

在一个交互式会话中,我们可以使用%timeit魔法命令快速测量代码运行时间。相同的命令会在一个循环中多次执行,多次运行时长的平均值作为该命令的最终评估时长。-n 选项可以控制命令在单词循环中执行的次数,-r选项控制执行循环的次数。

3.6 使用%debug命令进行快速debug

ipython带有一个强大的调试器。无论何时控制台抛出了一个异常,我们都可以使用%debug魔法命令在异常点启动调试器。接着你就能调试模式下访问所有的本地变量和整个栈回溯。使用ud向上和向下访问栈,使用q退出调试器。在调试器中输入?可以查看所有的可用命令列表。

我们也可以使用%pdb魔法命令来激活IPython调试器,这样,每当异常抛出时,调试器就会自动运行。

3.7 使用Pylab进行交互式计算

%pylab魔法命令可以使Numpymatplotlib中的科学计算功能生效,这些功能被称为基于向量和矩阵的高效操作,交互可视化特性。它能够让我们在控制台进行交互式计算和动态绘图。

在该示例中,我们首先定义了一个-10到10的线性空间中的1000个数值的向量,接着我们绘制了(x,sin(x))图像,这样我们就成功绘制出了sin(x)的函数图像:

3.8 在IPython中使用系统shell

我们可以在IPython中直接使用系统shell,并获取读取结果作为一个Python字符串列表。为了实现这种功能,我们需要使用感叹号!作为shell命令的前缀。比如现在在我的windows系统中,直接在IPython中ping百度:

一个有趣的事情是,在IPython中调用系统shell可以再次进入一个新的IPython shell中,如下:

当然,一般没人会这么干。

4.使用IPython Notebook

IPython Notebook使用浏览器作为界面,向后台的IPython服务器发送请求,并显示结果。在浏览器的界面中使用单元(Cell)保存各种信息。Cell有多种类型,需要强调的是,它也支持MarkDown语法,所以可以有MarkDown格式化文本单元,也可以有表示代码的Code单元。

IPython Notebook有一个重要的特点就是:可重复性的互动计算,这意味着我们可以重复更改并且执行曾经的输入记录。它可以保存成其他很多格式,比如Python脚本,HTML,PDF等,所以它可以记录我们的演算过程。很多课程,博客以及书籍都是用Notebook写的。

4.1 安装并运行

如果执行了上文中IPython的安装过程,IPython Notebook已经算是安装好了。怎么测试呢?Win + R打开运行窗口,输入ipython notebook,如果正确安装的话,这个命令就会默认在本地8888端口启动一个web服务,并自动打开浏览器,打开http://localhost:8888/tree页面,在这个页面我们可以看到当前目录下的所有文件夹以及ipynb文件。

当然,如果不想在当前默认目录启动该Web服务器的话,就在cmd窗口下切换目录之后再运行ipython notebook

自动打开如下页面:

我们可以点击当前目录下的Notebook文件进行编辑,也可以新建Notebook:

编辑Notebook可以选择代码模式和文本编辑模式,也可以导出各种不同格式的文件:

由于IPython Notebook是基于Web服务模式的,所以我们可以在远程服务器打开IPython服务器,在本地客户端启动IPython Web交互界面,这样可以很方便地操作远程数据

4.2 操作

在一个输入框即Cell中使用回车即Enter键,表示换行,也就是说一个Cell中可以输入多条语句。

一个Cell中的命令可以由两种方式运行:

我们也可以使用上面的菜单栏和工具栏对Cell进行各种增删复制粘贴等操作。

  如果还有问题未能得到解决,搜索887934385交流群,进入后下载资料工具安装包等。最后,感谢观看!

详细讲解IPython的更多相关文章

  1. head标签详细讲解

    head标签详细讲解 head位于html网页的头部,后前的标签,并以开始以结束的一html标签. Head标签位置如图: head标签示意图 head包含标签 meta,title,link,bas ...

  2. 详细讲解nodejs中使用socket的私聊的方式

    详细讲解nodejs中使用socket的私聊的方式 在上一次我使用nodejs+express+socketio+mysql搭建聊天室,这基本上就是从socket.io的官网上的一份教程式复制学习,然 ...

  3. iOS KVC详细讲解

    iOS KVC详细讲解 什么是KVC? KVC即NSKeyValueCoding,就是键-值编码的意思.一个非正式的 Protocol,是一种间接访问对象的属性使用字符串来标识属性,而不是通过调用存取 ...

  4. Android webservice的用法详细讲解

    Android webservice的用法详细讲解 看到有很多朋友对WebService还不是很了解,在此就详细的讲讲WebService,争取说得明白吧.此文章采用的项目是我毕业设计的webserv ...

  5. 详细讲解Android对自己的应用代码进行混淆加密防止反编译

    1.查看项目中有没有proguard.cfg. 2.如果没有那就看看这个文件中写的什么吧,看完后将他复制到你的项目中. -optimizationpasses 5 -dontusemixedcasec ...

  6. 详细讲解Hadoop源码阅读工程(以hadoop-2.6.0-src.tar.gz和hadoop-2.6.0-cdh5.4.5-src.tar.gz为代表)

    首先,说的是,本人到现在为止,已经玩过.                   对于,这样的软件,博友,可以去看我博客的相关博文.在此,不一一赘述! Eclipse *版本 Eclipse *下载 Jd ...

  7. [iOS]数据库第三方框架FMDB详细讲解

    [iOS]数据库第三方框架FMDB详细讲解 初识FMDB iOS中原生的SQLite API在进行数据存储的时候,需要使用C语言中的函数,操作比较麻烦.于是,就出现了一系列将SQLite API进行封 ...

  8. jquery插件分类与编写详细讲解

    jquery插件分类与编写详细讲解 1. 插件种类 插件其实就是对现有的方法(或者叫函数)做一个封装,方便重用提高开发效率.   jQeury主要有2种类型   1)实例对象方法插件 开发能让所有的j ...

  9. [VC++]用CTime类得到当前日期、时间、星期,格式化(详细讲解)

    用CTime类得到当前日期.时间.星期,格式化(详细讲解)2009/05/12 09:48 A.M.① 定义一个CTime类对象 CTime time; ② 得到当前时间 time = CTime:: ...

随机推荐

  1. redis-分布式锁-消除竞争条件

    因为信号量的设计过程中,获取一个信号量需要执行多个命令组成的流水,这样容易形成竞争条件. 为了消除信号量实现中所有可能出现的竞争条件,构建一个正确的计数信号量,需要在 信号量时,添加带有短暂超时时间的 ...

  2. 坑爹的tp-link管理密码设置

     tp-link管理密码最长14位,我设置了15位的密码,突然等不上去,上网发现不少人也有类似情况,后来看到一个文章说tp-link管理密码,可以设置6-15,于是抱着试一试的态度,输入我设置密码的前 ...

  3. java 对数组进行截取组合操作

    1.使用skip跳过和limit限制组合,示例: Integer skip = (page.getPageNum() - 1) * page.getPageNum(); Integer limit = ...

  4. 【SQL server初级】数据库性能优化一:数据库自身优化(大数据量)

    数据库优化包含以下三部分,数据库自身的优化,数据库表优化,程序操作优化.此文为第一部分 数据库性能优化一:数据库自身优化 优化①:增加次数据文件,设置文件自动增长(粗略数据分区) 1.1:增加次数据文 ...

  5. 深入理解 DeepSea 和 Salt 部署工具 - Storage6

    学习 SUSE Storage 系列文章 (1)SUSE Storage6 实验环境搭建详细步骤 - Win10 + VMware WorkStation (2)SUSE Linux Enterpri ...

  6. C语言I—2019秋作业02

    1.[新增内容] 这个作业属于那个课程 C语言程序设计 这个作业要求在哪里 <C语言I-2019秋作业02> 我在这个课程的目标是 这个作业在那个具体方面帮助我实现目标 <实现一些基 ...

  7. v-text和v-html的区别

    一.v-text 用于渲染普通文本,无论何时,绑定的数据对象上 msg属性发生了改变,插值处的内容都会更新. <span v-text="message"></s ...

  8. Scala 学习笔记之隐式参数和隐式转换并用

    隐式转换条件: 1. 当表达式类型与预期的类型不同时 2.当对象访问一个不存在的成员时 3.当对象调用某个方法,而该方法的参数声明与传入参数不相匹时. 隐式转换搜索范围: 1. 位于源火目标类型伴生对 ...

  9. Spring Boot 2.X(一):入门篇

    什么是 Spring Boot Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程.该框架遵循"约定优于配置& ...

  10. display值的作用分别是什么?relative和absolute分别是相对谁定位的?

    display值的作用分别是什么? none:元素隐藏,不占据位置 block:该元素显示为块级元素 inline:默认,该元素会被显示为内联元素 inline-block:行内块元素 list-it ...