Learning IPython for Interactive Computing and Data Visualization这本书的前两章的笔记, 这本书还被放在了IPython官网上, 虽然只有一百页多一点点, 但是讲的内容却很丰富, 介绍了IPython, numpy, pandas以及并行计算等方面.
(在开始系统学IPython之前简单使用过IPython, 那时候我还是更喜欢bpython的代码提示功能...)
ch1: 10 IPython essentials
在任何变量后面加问号?或者双问号??, 将会输出详细的信息(按q退出),??的信息更加详细些
Tab Completion: 没啥好说的 没有bpython做的好 也凑合吧...
_, __, ___保存最近三次的输出;_i, __i, ___i保存最近三次的输入(作为字符串保存)
magic commands
在IPython里面可以使用一些标准unix命令, 比如cd,pwd,ls等...
这个太好了 否则还要import os, 然后再什么os.chdir('...')
其实这些unix命令是IPython的magic commands, 这些magic commands一般用%作为前缀.
但是由于默认IPython开启了automagic system, 上面那些命令可以不用加前缀了(或者使用Tab自动给加上前缀)
%run命令, 运行一个.py脚本, 但是好处是, 与运行完了以后这个.py文件里的变量都可以在Ipython里继续访问
%timeit命令, 可以用来做基准测试(benchmarking), 测试一个命令(或者一个函数)的运行时间
%debug命令: 当有exception的时候, 在console里输入%debug即可打开debugger.
在debugger里, 输入u,d(up, down)查看stack, 输入q退出debugger
使用%pdb开启自动pdb模式
%pdb
Automatic pdb calling has been turned ON
%pylab命令, 大杀器, 看一下都import了什么:
画图的时候可以不用非要加plt.前缀了, 直接plot()即可. 图像化出来的时候, 画图窗口并没有block, 可以动态(interactively)画图.
另外, qtconsole和notebook一样, 指定了inline选项以后可以直接在窗口里画图:
后来发现inline的图片貌似不能放大看, 所以有时候还是单独一个窗口比较好, 换到非inline模式只需要再输入以下%pylab, 加上选项qt:%pylab qt
IPython Notebook
(重头戏)
这个可以在浏览器里(!!)使用IPython, 并且可以使用多行编辑后再一并执行.
The Notebook brings the functionality of IPython into the browser for multiline textediting features, interactive session reproducibility, and so on.
在shell/cmd窗口里启动ipython的时候加上notebook:
$ipython notebook
看到浏览器打开了, 很神奇:
新建一个notebook, 用用看:
使用的过程中渐渐理解了为什么书里说可以用来做"multiline textediting features, interactive session reproducibility"... 因为这不只是个编程的东西, 还可以作为一个笔记本 — 而且是一个交互式的笔记本!
(注: 更多关于notebook的介绍在下面第二章的内容里.)
代码,或者段落, 按照cell(格子)进行组织, 一个cell里面的内容可以是code, 但是也同样可以是markdown的段落, 或者是一个标题(heading).
在一个代码的cell里, 写入多行代码, 就像在编辑器里写python程序一样, 按回车只会换行, 不会运行程序.
写了一段程序代码以后, 按ctrl+Enter运行程序, 运行结果也是一个作为cell. (注: 在qtconsole里面相反, 如果要输入多行程序的话, 按Ctrl+Enter换行(按一一次ctrl+enter即可进入多行编辑模式), 写了几行代码以后要运行的话, 就按两次回车, 或者按Shift+Enter)
...还有好多快捷键, 按Esc以后再按h就可以看到... 这个还分编辑模式和命令模式呢... 真不能小看了IPython了!
customizing IPython
保存自己的IPython配置文件, 只需要在shell/cmd里输入ipython profile create,配置文件存储在~.ipython或者~/.config/ipython目录里.
ch2: Interavtive Work with IPython
IPython可以实现shell(OS)和python的交互. 这样做一些unix shell的操作的时候可以不必退出console了.
navigating the file system
例子: 完成下载压缩包, 解压缩, 以及打开解压后的文件这些操作...
在py变量前面加入$, 可以把这个变量共享给OS或者magic command:
folder='data'%mkdir$folder
这样就在当前目录下建立一个'data'文件夹 — 这可比py的命令好记多了啊...%mkdir的原理其实是给了shell命令一个别名(alias).
然后,%bookmark可以把当前的目录加入收藏夹 下次cd的时候方便直接跳到这里来:
ex.%bookmark bm那么以后可以直接用cd bm跳到这个目录下.%bookmark -l可以列出收藏夹的目录内容.
然后发现原来IPython连文件名都是可以提示的啊!...
with open('0<tab>
0.circles 0.edges
Accessing system shell with IPython
在IPython里调用系统的命令, 不用再使用sys.exec('...')之类冗长的方式了, 只需要在系统的命令前面加上一个感叹号!即可...
shell返回的结果可以作为一个string的列表保存在一个python variable里.
(当然 上面这一行只能在unix系统下运行, 因为Windows的cmd没有ls 和 grep命令)
还可以把一条比较长的命令作为alias保存起来, 用%alias命令... (这个应该一般用不到)
%alias largest ls -1sSh | grep %s
The Extended Python Console
%history或者%hist, 显示之前的记录, 有一些参数可用...
%store把python变量的内容保存下来, 以后的session可以用
%paste导入并执行剪贴板里面的内容
%run之前讲过了, 运行py文件, 运行后py文件里的变量可以在console里访问
%edit打开系统的文件编辑器, 并且在关闭这个编辑器时自动运行程序
介绍了一个包 networkx, 可以用来分析复杂网络(graph)的....
debug
debug加入断点:%run -d -b29 script.py运行script.py 并且在29行的时候暂停, 当输入c的时候再继续运行.
一些pdb(debugging环境)里常用的命令:
u/d for going up/down into the call stack
s to step into the next statement
n to continue execution until the next line in the current function
r to continue execution until the current function returns
c to continue execution until the next breakpoint or exception
p to evaluate and print any expression
a to obtain the arguments of the current functions
The!prefix to execute any Python command within the debugger
benchmarking("基准测试")
%time it fun()测试一个函数的执行速度
%run -t和%timeit效果类似, 作用是测试一个py脚本文件的执行速度
更精细的运行时间测试, 可以用profile模块
The profiler outputs details about calls of every Python function used directly or indirectly in this script.
@@...好高级!!! 这样的话就更容易发现程序运行的瓶颈在哪里了! 方法是使用%run -p或者%prun
Using the IPython notebook
这个notebook的功能实在是很NB... 不仅可以加入代码/markdown段落, 还可以加入图片和视频... notebook的格式为.ipybn文件, 用JSON存储数据.
输入ipython notebook(或者在ipython里输入!ipython notebook)以后, 会在8888端口建立一个web server, 访问http://localhost:8888/就可以看到上面的那个截图, 或者称之为notebook dashboard.
cell magics的作用域是整个cell(多行), 而magic command的作用域是一行, cell magics的前缀是两个百分号%%.
从一个py文件直接建立一个notebook, 只需要把文件拖入dashboard即可, 然后notebook也可以保存为文件.
编辑了Markdown以后, 还是Ctrl+Enter/Shift+Enter, 即可成为格式化的文本, 再双击就可以编辑!!
让plot的图片直接嵌入在notebook里面: 使用ipython notebook --pylab inline, 或者在notebook里面输入%pylab inline
notebook的一些快捷键
Esc从编辑模式(edit mode)退出到命令模式(command mode)
Enter从命令模式到编辑模式
(编辑模式下)
ctrl+Enter: 运行程序/markdown代码
shift+Enter: 运行程序, 并自动跳到下一个cell
alt+Enter: 运行程序, 并自动在后面新建一个cell在
(命令模式下)
c: 复制一个cell
x: 剪切一个cell
v: 粘贴cell
a: 在当前cell上面(above)新建一个cell
b: 在当前cell下面(below)新建一个cell
m: 让当前cell变成一个markdown的cell
y: 让当前cell变成code的cell
1,2,3...: n级标题
j,k: 上下移动选中的cell, vim风格..
dd(d按两下): 删除一个cell(vim 风格...)
......爽到爆!!