一起用ipython
安装
安装python2版本的软件包就用命令
pip install ipython
安装python3版本对应的软件包就用命令
pip3 install ipython
进入了ipython,ipython会提示您键入下面四个命令之一去试着使用ipython:
命令名 说明
? ipython特性的介绍和概述
%quickref 一份手册,包含了所有的命令
help python的帮助系统
object? 关于object的详细信息,如果键入object??会更详细
首先是推荐您看一下quickref的。您注意到了,这个命令以%开头。所有以%开头的方法,都是所谓的魔术方法(Magic function),
也就是ipython内置的一些方法。
需要注意的是,魔术方法有%和%%之分,比如%timeit和%%timeit。这玩意在ipython中有专门的叫法,
前者叫line magic后者叫cell magic。
顾名思义,前者是专门针对一行的命令,后者针对多行的命令(这是notebook中的术语,关于notebook请参阅最后),如是而已。
所有的魔术方法都可以查看源码,仔细阅读的话,对自己写代码也很有裨益,具体方法是在魔术方法后面加??,譬如%timeit??。
代码是经过高亮和格式化的,
应该很容易阅读才是。如果您有着奇妙的好奇心的话,想必刚才也尝试过%timeit?。区别是,这次没有源码出现对吧。
但是其他信息,比如type什么的指导性内容会显示出来。
Tab键自动完成
在shell中输入表达式时,只要按下Tab键,当前命令控件中任何与输入的字符串相匹配的变量(对象、函数等)就会被找出来。
ps.之前我发现我的ipython没有Tab键自动补全功能,tab键的功能是缩进。最后 pip install pyreadline即可解决。
下面这个例子,输入b.后按下<tab>键即可得到下图的结果。
内省
在变量的前面或后面加上一个问号(?)就可以将有关该对象的一些通用信息显示出来。这就叫做对象的内省。
如果对象是一个函数或实例方法,则其docstring也会被现实出来。
使用??还将显示出该函数的源代码。
一些字符串配以通配符(*)即可显示出所有与该通配符表达式相匹配的名称。
中断正在执行的代码
按下Ctrl-C就会引发一个KeyboardInterrupt。除了一些非常特殊的情况下,绝大部分python程序都会立即停止执行
执行剪贴板中的代码
书上说使用ctrl+shift+v将剪贴板的代码片段粘贴出来,然而windows系统似乎不可行,所以鼠标右键粘贴好了。
%paste可以承载剪贴板中的一切文本,并在shell中以整体形式执行。
%cpaste跟%paste差不多,只不过它多出了一个用于粘贴代码的特殊提示符而已。如果发现粘贴的代码有错,只需要按下ctrl+c即可终止%cpaste提示如。
键盘快捷键
在此粘贴给大家作为备忘。
- Ctrl-P 或上箭头键 后向搜索命令历史中以当前输入的文本开头的命令
- Ctrl-N 或下箭头键 前向搜索命令历史中以当前输入的文本开头的命令
- Ctrl-R 按行读取的反向历史搜索(部分匹配)
- Ctrl-Shift-v 从剪贴板粘贴文本
- Ctrl-C 中止当前正在执行的代码
- Ctrl-A 将光标移动到行首
- Ctrl-E 将光标移动到行尾
- Ctrl-K 删除从光标开始至行尾的文本
- Ctrl-U 清除当前行的所有文本译注12
- Ctrl-F 将光标向前移动一个字符
- Ctrl-b 将光标向后移动一个字符
- Ctrl-L 清屏
魔术命令
魔术关键字以%开头,如果automagic打开了,则不用输入%,否则需要,使用automagic可以切换状态
可以使用%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中的对象上的一切引用
env 显示环境变量
ed或edit 编辑一个文件并执行
ed -x filename 编辑文件不执行
edit 3:10 编辑3:10行的指令并执行
hist 显示历史纪录,可以用-n增加行号
hist 3:10 显示3-10行的历史纪录
bg function 把function函数放到后台执行
pwd 当前目录
pycat filename 语法高亮显示一个文件
macro name 1:10 把1:10行的代码设为name宏
save filename 1:10 把1:10行代码保存到文件中
time statement 计算一段代码执行时间
timeit statement 自动选择重复和循环次数计算一段代码执行时间
run filename 执行一个文件,如果希望防止执行的,需要增加if name == “main“:
autoindent 如果启用,粘贴的时候会自动缩进代码
reset 重置所有变量
Bash命令
cls 清除屏幕
colors
基于Qt的富GUI控制台
Ipython团队开发了一个基于Qt框架(其目的是为终端应用程序提供诸如内嵌图片、多行编辑、语法高亮之类的富文本剪辑功能)的GUI控制台。
使用
ipython qtconsole --pylab=inline
来启动的话可为其添加绘图功能。
ps.这一步刚开始无法执行,我的解决方法是:
pip install qtconsole,就可以运行了- -..
%run命令
在ipython会话环境中,所有文件都可以通过%run命令当做Python程序来运行。
输入 %run 路径+python文件名称即可。
ipython一般的使用,通常只是为了测试一行或者几行代码是否能够执行。究其原因,还是因为命令行中书写长代码相较于在文件中写代码并不方便,一方面是格式,另一方面是在命令行中写代码,一旦中间代码写错,修改起来还是很麻烦的。于是我们不得不一次次退出ipython,去python xxx.py执行。或者tmux开两个窗口来测试。
但是其实ipython已经提供了很方便的机制用来执行一个脚本,就是%run命令,%run可以简化为run。
使用起来类似于熟悉的python test.py,使用run test.py就好。run命令还可以附加选项,常用的有-t选项,这个会在脚本执行完后,打印出执行的cpu timings。如果指定了-t选项,后面可以跟一个-Nx,x代表一个数字。表示重复执行x次。
另外比较好用的是-d选项,这个会在pdb中运行脚本。后跟-bxx打断点。个人没有什么python调试的经验,您有兴趣可以亲自尝试。
还有一个-p选项,这个选项会开启python profiler,从而打印出详细的执行时间、函数调用等等信息供优化参考。
%timeit
这个命令用来测试一条命令执行的时间,一般而且,会重复100次运行这个命令,然后取出最好的3个结果取平均值。
试着执行下面的命令:
In[1]: %timeit [x*x for x in range(100000)]
同样,可以指定选项。
-n指定重复次数,默认100
-r是取多少个结果的平均值,默认是3
顺带一提,%timeit测出来的结果远比真实运行更快,原因是,timeit执行中,会暂时关闭掉垃圾回收(gc)。
shell中使用python变量
其实这个不算是魔术方法啦,只是单独列出来也不太合适,所以也就写在这里。
请看下面这段代码:
folder = 'data'
mkdir $folder
cd %folder
注意到了么,mkdir是一个魔术方法,它是%mkdir的一个链接,%mkdir事实上就是shell中的mkdir方法。而folder是一个python变量。但是,确实,shell下的命令访问了python的变量,只是在变量名前面加了$。如果您熟悉shell脚本的话,这种方式应该很亲切才对。
%bookmark
这个方法通常用来记忆路径,譬如说,您每次都需要cd进一个叫做github/miko/loli/shoujo的目录,这时候,您可以对这个路径做一个书签,%bookmark shoujo github/miko/loli/shoujo,这样以后就可以直接cd shoujo这样。
顺便,如果没有指定路径,会默认使用当前路径。
%alias
正如名字揭示的,这个方法用来指定别名。不过,ipython的%alias还能进行参数传递。
看看下面这段:
In [1]: %alias largest ls -1sSh | grep %s
In [2]: largest circles
很容易懂不是么?%alias后面跟的那个参数就是别名,然后可以通过%s来指定一个参数,使用时传入。
%store
默认的,别名只会存在于本次会话中,如果希望下次还能使用这个别名,使用%store方法存下来吧。%store latest
另外,没保存也不要紧,%store -r会恢复上次会话的别名。
%hist
ipython中history会保存所有会话中的记录,所以隔一年什么的记录就会相当多啦。
虽然我知道你们都会用up,down来寻找历史记录……恩,试试ctrl+r,有惊喜。
另外,类似于hist 3-7什么的,好像也不用我解释就是了。
-g选项和grep类似,可以查找些东西出来,然后-n显示行号,-f保存历史记录到文件中去,-p把行号显示为n:>>>,-n把输入的结果显示出来