ipython

参考地址:http://www.cnblogs.com/cbscan/p/3545084.html

http://www.cnblogs.com/zzhzhao/p/5295476.html

 

IPython是一个综合的交互式编程环境,比原本python命令进入的交互式环境要强大很多。IPython主要包含3个部分:

1.IPython shell 比python原生的增强很多的功能,比如:tab补全、富媒体画图等。

2.一个基于web的交互式环境,允许多个客户端连接到kernel,它即是Notebook。

3.交互式并行计算

IPython是自己简单写代码片段快速验证的好工具,也在科学计算、Python教学等领域有较多的应用。

 

安装ipython:

pip install ipython

只需这一条指令就可以将ipython及其依赖的库全部安装成功

 

ipython特色功能

1、tab键自动补全功能

 

2、?或??查询

 

给一个变量或函数名加前缀或后缀?或??,可以查询该变量或函数的详细信息

 

3、中断执行

按下Ctrl-C就会引发一个KeyboardInterrupt。除了一些非常特殊的情况下,绝大部分python程序都会立即停止执行

 

4、基于Qt的富GUI控制台

要先通过,pip install qtconsole,指令安装,可以会有缺少依赖包的错误,先安装依赖包就可以了

通过ipython qtconsole或jupyter qtconsole启动界面

在这个界面中,可以创建多个终端,在cmd界面上复制粘贴很坑爹,在这里就很容易

 

5、shell命令和别名

在ipython中,以感叹号(!)开头的命令行表示其后的所有内容需要在系统shell中执行。

##再启动一个python解释器

 

6、%magic命令

IPython中Magic命令有两种执行方式,以%开始的命令被称为行命令,它只对单行有效,以%%开头的为单元命令,它放在单元的第一行,对整个单元有效。

测试代码的执行时间:%time和%timeit

有时候你可能会希望了解某个复杂计算过程中到底是哪些函数占用的时间最多。

ipython专门提供了两个魔术函数(%time和%timeit)以便自动完成该过程。

%time一次执行一条语句,然后报告总体执行时间。

例子:下面是一个拥有60万字符串的数组,以及两个不同的“能够选出其中以foo开头的字符串”的方法:

#一个非常大的字符串数组
strings = ['foo','foobar','baz','qux','python','Guido Van Rossum']*100000
method1 = [x for x in strings if x.startswith('foo')]
mathod2 = [x for x in strings if x[:3] == 'foo']

通过%time来测试:

啦啦啦 差距出来了。

但是这并不是一个非常精确的结果,如果你对相同的语句多次执行%time的话,就会发现其结果是会变的。(亲测真的会变233看下图)

为了得到更为精确的结果,需要使用魔术函数%timeit,对于任意语句,它会自动多次执行以产生一个非常精确的平均执行时间。

例如timeit命令可以快速测试代码的执行效率,它可以作为行命令或者单元命令。

%timeit 1 + 1
%timeit 1.0 + 1.0
%timeit "1" + "1"
10000000 loops, best of 3: 52 ns per loop
10000000 loops, best of 3: 53.4 ns per loop
10000000 loops, best of 3: 50.9 ns per loop
%%timeit
s = 0
for i in xrange(100):
    s += i
100000 loops, best of 3: 11 us per loop

每个Magic命令都可以指定参数,可以输入timeit?查看其帮助文档。下面让我们看看一些常用的Magic命令。

 

%run命令

在ipython会话环境中,所有文件都可以通过%run命令当做Python程序来运行。

输入 %run 路径+python文件名称即可。

 

%pylab命令将载入numpy和pylab,并且将这两个模块中的名字载入到全局名字空间中。缺省参数时,它使用matplotlib的缺省界面库显示图表,如果带inline参数则将图表作为图像插入到Notebook中。使用界面库显示图像时可以使用交互工具,而将图表直接插入到Notebook中则有利于编写文档。

下面的例子,plotrandom是从pylab和numpy中载入的。

%pylab inline
plot(random.randn(100));
Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline].
For more information, type 'help(pylab)'.


%load可以从文件或者网址载入代码到一个新的单元中

%prun用于代码的执行性能分析,可以作为行命令和单元命令使用。下面的程序分析numpy.linalg.det()的性能:

%%prun
for i in xrange(100):
    linalg.det(random.rand(10,10))

其输出如下:

3402 function calls in 0.096 seconds

Ordered by: internal time

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
   100    0.032    0.000    0.091    0.001 linalg.py:1560(slogdet)
   300    0.022    0.000    0.022    0.000 {method 'reduce' of 'numpy.ufunc' objects}
   200    0.011    0.000    0.012    0.000 numeric.py:167(asarray)
   100    0.006    0.000    0.006    0.000 linalg.py:84(_realType)
   100    0.005    0.000    0.005    0.000 linalg.py:151(_assertRank2)
   ...

%load_ext载入IPython的扩展模块,通过它可以载入更多的Magic命令。

 

其他magic命令

魔术命令

粘贴在此以作备忘

命令 说明
%quickref 显示IPython的快速参考
%magic 显示所有魔术命令的详细文档
%debug 从最新的异常跟踪的底部进入交互式调试器
%hist 打印命令的输入(可选输出)历史
%pdb 在异常发生后自动进入调试器
%paste 执行剪贴板中的Python代码
%cpaste 打开一个特殊提示符以便手工粘贴待执行的Python代码
%reset 删除interactive命名空间中的全部变量/名称
%page OBJECT 通过分页器打印输出OBJECT
%run script.py 在IPython中执行一个Python脚本文件
%prun statement 通过cProfile执行statement,并打印分析器的输出结果
%time statement 报告statement的执行时间
%timeit statement 多次执行statement以计算系综平均执行时间。对那些执行时  间非常小的代码很有用
%who、%who_ls、%whos 显示interactive命名空间中定义的变量,信息级别/冗余度可变
%xdel variable 删除variable,并尝试清除其在IPython中的对象上的一切引用

 

安装notebook

pip install notebook

 

启动notebook

ipython notebook或

jupyter notebook

IPython Notebook使用浏览器作为界面,向后台的IPython服务器发送请求,并显示结果。在浏览器的界面中使用单元(Cell)保存各种信息。Cell有多种类型,经常使用的有表示格式化文本的Markdown单元,和表示代码的Code单元。

每个代码单元都有一个输出区域,在Code单元中输入代码,按 Shift-Enter 将运行此代码,代码中最后一个表达式的值将输出区域显示。如果希望屏蔽输出,可以在最后一条语句之后添加一个分号:”;”。此外,代码中还可以使用print语句在输出区域中显示信息。

在Markdown单元中还可以直接使用Html和Javascript。

notebook与qtconsole比较类似,区别是一个web端,一个是client端。并且在notebook中功能更多,以下是notebook特有的功能

1、可以在网页编辑txt文档

2、可以将notebook保存为py,ipynb,html,pdf各种格式,qtconsole目前只能保存为HTML格式

3、除了code单元,还有markdown单元,在里面可以直接解释HTML和JavaScript

它们与终端里的区别在于,它们可以直接输出显示生成的数学公式或图表,图片,这在终端里是不可能实现的

 

posted on 2017-03-07 18:54  simple_孙  阅读(2078)  评论(0编辑  收藏  举报

导航