安装 IPython
- pip install ipython
- ipython #启动
或者使用 ipython notebook
jupyter notebook# 启动
在 IPython 里查看帮助文档
简单的说, 有三种方法
使用 help 函数可以查看函数描述
使用 ? 可以查看函数, 对象等的描述和用法
使用 ?? 可以在? 的基础上追加源码, 前提是该函数是由 python 语言编写的.
使用 TAB 可以对命令进行补全
如果并不知道首字符, 只知道中间的匹配项, 也可以使用 * 来做匹配.
- In [1]: help(len)
- In [2]: len?
- In [3]: len??
- In [4]: import h<TAB>
- hashlib hmac http
- heapq html husl
- In [5]: *Warning?
- BytesWarning RuntimeWarning
- DeprecationWarning SyntaxWarning
- FutureWarning UnicodeWarning
- ImportWarning UserWarning
- PendingDeprecationWarning Warning
- ResourceWarning
在 IPython 的一些快捷键
Keystroke | Action |
---|---|
Ctrl-a | 光标回到行首 |
Ctrl-e | 光标回到行末 |
Ctrl-b or the left arrow key | 光标后移一位 |
Ctrl-f or the right arrow key | 光标前移一位 |
------------------------------- | -------------------------------------------------- |
Backspace key | Delete previous character in line |
Ctrl-d | 删除光标后的字符 |
Ctrl-k | 剪切光标后的字符 |
Ctrl-u | 剪切光标前的字符 |
------------------------------- | -------------------------------------------- |
Ctrl-l | 清除屏幕 |
Ctrl-c | 中止命令 |
Ctrl-d | 退出 ipython 会话 |
------------------------------------- | -------------------------------------------- |
Ctrl-p (or the up arrow key) | 进入历史的上一个命令 |
Ctrl-n (or the down arrow key) | 进入历史的下一个命令 |
Ctrl-r | 搜索命令历史 |
魔术命令
代码粘贴命令
有时候想要在其他地方复制一段代码, 可直接在命令行里粘贴会报错, 就可以使用 %paste 和 %cpaste 命令.
先在其他地方复制一段代码, 然后
- In [3]: %paste
- >>> def donothing(x):
- ... return x
- ## -- End pasted text --
PS: 只需输入 %paste
%cpaste 在输完之后留了一个交互空间, 可以像文本编辑器一样输入.
代码执行命令
%run 可以用来执行外部 py 脚本, 函数, 代码.
- #-------------------------------------
- # file: myscript.py
- def square(x):
- """square a number"""
- return x ** 2
- for N in range(1, 4):
- print(N, "squared is", square(N))
你可以在 IPython 会话中执行:
- In [6]: %run myscript.py
- 1 squared is 1
- 2 squared is 4
- 3 squared is 9
代码计时命令
%timeit
统计一行代码的执行时间
- In [8]: %timeit L = [n ** 2 for n in range(1000)]
- 1000 loops, best of 3: 325 µs per loop
``` 也可以使用 ``%%timeit`` 统计代码块的执行时间.
- ```ipython
- In [9]: %%timeit
- ...: L = []
- ...: for n in range(1000):
- ...: L.append(n ** 2)
- ...:
- 1000 loops, best of 3: 373 µs per loop
更多的魔术命令
- %magic %lsmagic %timeit?
- In [12]: %lsmagic
- Available line magics:
- %alias %alias_magic %autoawait %autocall %autoindent %automagic %bookmark %cd %cls %colors %config %copy %cpaste %ddir %debug %dhist %dirs %doctest_mode %echo %ed %edit %env %gui %hist %history %killbgscripts %ldir %load %load_ext %loadpy %logoff %logon %logstart %logstate %logstop %ls %lsmagic %macro %magic %matplotlib %mkdir %notebook %page %paste %pastebin %pdb %pdef %pdoc %pfile %pinfo %pinfo2 %popd %pprint %precision %prun %psearch %psource %pushd %pwd %pycat %pylab %quickref %recall %rehashx %reload_ext %ren %rep %rerun %reset %reset_selective
- %rmdir %run %save %sc %set_env %store %sx %system %tb %time %timeit %unalias %unload_ext
- %who %who_ls %whos %xdel %xmode
- Available cell magics:
- %%! %%HTML %%SVG %%bash %%capture %%cmd %%debug %%file %%HTML %%JavaScript %%JS %%latex %%Markdown %%perl %%prun %%pypy %%python %%python2 %%python3 %%Ruby %%script %%sh %%svg %%sx %%system %%time %%timeit %%writefile
- Automagic is ON, % prefix IS NOT needed for line magics.
In Out 的妙用
在 ipython 中的每个会话都有编号, 就是 In , 如果有输出就有一个 Out 编号. 在整个过程可以直接调用.
- In [4]: print(In)
- In [5]: Out
- In [6]: Out[2] ** 2 + Out[3] ** 2
- # 也可以用_来代替上一个输出,__代表第上两个输出.
- In [7]: print(_)
- In [8]: print(__)
- In [9]: print(___)
- # 也可以判断第 4 次输入是否有输出
- In [10]: 14 in Out
- # 查看历史命令
- In [16]: %history -n 1-4
- 1: import math
- 2: math.sin(2)
- 3: math.cos(2)
- 4: print(In)
在 IPython 中执行 shell 命令
所谓 shell 命令就是在系统中执行的命令.
ipython 可以直接执行系统命令, 这是普通 python 环境所没有的.
- In [1]: !ls
- myproject.txt
- In [2]: !pwd
- /home/jake/projects/myproject
- In [3]: !echo "printing from the shell"
- printing from the shell
也可以对命令的返回值赋值
- In [4]: contents = !ls
- In [5]: print(contents)
- ['myproject.txt']
- In [6]: directory = !pwd
- In [7]: print(directory)
- ['/Users/herui/notebooks/tmp/myproject']
也可以使用魔法命令代替
- In [14]: %cd ..
- /home/herui/projects
%cat %cp %env %ls %man %mkdir %more %rm %pwd 等等
错误与调试
错误栈样式
使用魔法命令 %xmode 是 exception mode 的缩写. 它有三种模式. plain,Context,Verbose, 默认为 Context.
修改模式:
%xmode Plain
调试:%debug 进入错误环境, 然后可以自己调试.
- Exception reporting mode: Plain
- Automatic pdb calling has been turned ON
- Traceback (most recent call last):
- File "<ipython-input-9-569a67d2d312>", line 3, in <module>
- func2(1)
- File "<ipython-input-1-d849e34d61fb>", line 7, in func2
- return func1(a, b)
- File "<ipython-input-1-d849e34d61fb>", line 2, in func1
- return a / b
- ZeroDivisionError: division by zero
- > <ipython-input-1-d849e34d61fb>(2)func1()
- 1 def func1(a, b):
- ----> 2 return a / b
- 3
- # 在这里:
- ipdb> print(b)
- 0
- ipdb> quit
时间和效率记录
四个命令
- %time
- %timeit
- %prun ==> program run
- lprun ==> line program run
time 和 timeit 不再展示
- def sum_of_lists(N):
- total = 0
- for i in range(5):
- L = [j ^ (j>> i) for j in range(N)]
- total += sum(L)
- return total
- %prun sum_of_lists(1000000)
- %lprun -f sum_of_lists sum_of_lists(5000)
结果像这样:
- Timer unit: 1e-06 s
- Total time: 0.009382 s
- File: <ipython-input-19-fa2be176cc3e>
- Function: sum_of_lists at line 1
- Line # Hits Time Per Hit % Time Line Contents
- ==============================================================
- 1 def sum_of_lists(N):
- 2 1 2 2.0 0.0 total = 0
- 3 6 8 1.3 0.1 for i in range(5):
- 4 5 9001 1800.2 95.9 L = [j ^ (j>> i) for j in range(N)]
- 5 5 371 74.2 4.0 total += sum(L)
- 6 1 0 0.0 0.0 return total
更多内容请查看官方文档!
来源: http://www.jianshu.com/p/0fae936a8da1