IPython cheatsheet
1. 使用命令历史
IPython 维护了一个小的磁盘数据库,包含执行的每条命令的文本。不同于notebook,其每个代码单元都会记录输入和输出。
1.1 搜索和复用命令历史
可以利用上下键,向上向下搜索已经执行的命令,可以键入部分开头的命令来搜索。
# 演示在命令行的操作
1 + 1
2
%run /Users/hhh/Documents/CS/利用python进行数据分析/test.py
hello word!
2 + 3
5
# 命令行中,上翻是2+3,再上翻是%run。。。,可以先键入%run,再下翻,就会只寻找最近的有重复字段的命令
%run /Users/hhh/Documents/CS/利用python进行数据分析/test.py
hello word!
# 在mac中,可以使用Ctrl-R来搜索命令(关键字)
1.2 输入和输出变量
对于输出变量:前一个输出_
或__
2 ** 27
134217728
_
134217728
3 * 6
18
_
18
__
18
对于输入变量:_iX
其中X比啊是输入的行号,相应的输入为_X
foo = 'bar'
foo
'bar'
_i12
"foo = 'bar'"
_i13
'foo'
_13
'bar'
_i14
'_i12'
_14
"foo = 'bar'"
exec(_i13)
print('hhh')
hhh
exec(_i20)
hhh
_i20
"print('hhh')"
一些魔术命令:
- %hist 可以用包含或者不包含行号的形式打印全部或者部分输入历史记录
- %reset 用于清除交互命名空间以及可选的输入和输出缓存
- %xdel 用于从IPython机中移除对特定对象的所有饮用。
%hist -n
1:
# 演示在命令行的操作
1 + 12: %run /Users/xxx/Documents/CS/利用python进行数据分析/test.py3: 2 + 34:
# 命令行中,上翻是2+3,再上翻是%run。。。,可以先键入%run,再上翻,就会只寻找最近的有重复字段的命令
%run /Users/xxx/Documents/CS/利用python进行数据分析/test.py5: # 在mac中,可以使用Ctrl-R来搜索命令(关键字)6: 2 ** 277: _8: __9: 3 * 610: _11: __12: foo = 'bar'13: foo14: _i1215: _i1316: _1317: _i1418: _1419: exec(_i13)20: print('hhh')21: exec(_i20)22: _i2023: %hist24: %hist -l25: %hist -l -n26: %hist -n
%reset
Once deleted, variables cannot be recovered. Proceed (y/[n])? y
foo
---------------------------------------------------------------------------NameError Traceback (most recent call last)<ipython-input-30-f1d2d2f924e9> in <module>
----> 1 fooNameError: name 'foo' is not defined
%xdel
NameError: name '' is not defined
2. 与操作系统交互
2.1 shell命令及其别名
# 使用!开始一行,是告诉IPython在系统shell中执行其后的命令
# 也可以把命令行的输出储存在一个变量中
# 获取自己的ip
ip_info = !ifconfig en0 | grep "inet "
ip_info[0].strip()
'inet xxxxxxxx netmask 0xffffff00 broadcast xxxxxxxxxx'
# 也可以在shell命令中使用当前python环境的值
foo = 'test*'!ls $foo
test.py
# %alias 魔术命令为shell命令定义别名%alias ll ls -l
ll /usr
total 0
lrwxr-xr-x 1 root wheel 25 Mar 26 15:21 [35mX11[m[m -> ../private/var/select/X11
lrwxr-xr-x 1 root wheel 25 Mar 26 15:21 [35mX11R6[m[m -> ../private/var/select/X11
drwxr-xr-x 1012 root wheel 32384 Mar 26 15:21 [34mbin[m[m
drwxr-xr-x 30 root wheel 960 Mar 26 15:21 [34mlib[m[m
drwxr-xr-x 311 root wheel 9952 Mar 26 15:21 [34mlibexec[m[m
drwxr-xr-x 19 root wheel 608 Apr 11 18:06 [34mlocal[m[m
drwxr-xr-x 233 root wheel 7456 Mar 26 15:21 [34msbin[m[m
drwxr-xr-x 45 root wheel 1440 Mar 26 15:21 [34mshare[m[m
drwxr-xr-x 6 root wheel 192 Mar 26 15:21 [34mstandalone[m[m
%alias test_alias (cd examples; ls; cd ..)
test_alias
macrodata.csv spx.csv tips.csv
注意,关闭IPython窗口或者notebook,这些设置不会保留,因为没有更改系统配置。
2.2 目录书签系统
使用%bookmark创建目录的别名,方便跳转
%bookmark py4da /Users/xxx/Documents/CS/利用python进行数据分析
cd py4da
(bookmark:py4da) -> /Users/xxx/Documents/CS/利用python进行数据分析
/Users/xxx/Documents/CS/利用python进行数据分析
pwd
'/Users/xxx/Documents/CS/利用python进行数据分析'
IPython 会保存这个书签,即便关闭。另外,如果书签名称和当前工作目录中的目录名称冲突,可以使用-b标志进行覆盖,使用书签。使用%bookmark和-l可以列出所有的书签。
%bookmark -l
Current bookmarks:
py4da -> /Users/xxx/Documents/CS/利用python进行数据分析
%bookmark py3da /Users/xxx/Documents/CS/利用python进行数据分析
%bookmark -l
Current bookmarks:
py3da -> /Users/xxx/Documents/CS/利用python进行数据分析
py4da -> /Users/xxx/Documents/CS/利用python进行数据分析
删除全部书签:
%bookmark -r
%bookmark -l
Current bookmarks:
%bookmark py3da /Users/xxx/Documents/CS/利用python进行数据分析
%bookmark py4da /Users/xxx/Documents/CS/利用python进行数据分析
%bookmark -l
Current bookmarks:
py3da -> /Users/xxx/Documents/CS/利用python进行数据分析
py4da -> /Users/xxx/Documents/CS/利用python进行数据分析
删除指定书签:
%bookmark -d py3da
3. 软件开发工具
3.1 交互式调试器
在异常发生后立刻输入%debug命令,唤起“后现代”调试器,并进入抛出异常的堆栈区。
run examples/ipython_bug.py
---------------------------------------------------------------------------AssertionError Traceback (most recent call last)~/Documents/CS/利用python进行数据分析/examples/ipython_bug.py in <module>1 a = 52 b = 6
----> 3 assert(a + b == 10)AssertionError:
%debug
> [0;32m/Users/xxx/Documents/CS/利用python进行数据分析/examples/ipython_bug.py[0m(3)[0;36m<module>[0;34m()[0m
[0;32m 1 [0;31m[0ma[0m [0;34m=[0m [0;36m5[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 2 [0;31m[0mb[0m [0;34m=[0m [0;36m6[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m----> 3 [0;31m[0;32massert[0m[0;34m([0m[0ma[0m [0;34m+[0m [0mb[0m [0;34m==[0m [0;36m10[0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m
ipdb> u
> [0;32m/Users/xxx/opt/anaconda3/lib/python3.8/site-packages/IPython/utils/py3compat.py[0m(168)[0;36mexecfile[0;34m()[0m
[0;32m 166 [0;31m [0;32mwith[0m [0mopen[0m[0;34m([0m[0mfname[0m[0;34m,[0m [0;34m'rb'[0m[0;34m)[0m [0;32mas[0m [0mf[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 167 [0;31m [0mcompiler[0m [0;34m=[0m [0mcompiler[0m [0;32mor[0m [0mcompile[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m--> 168 [0;31m [0mexec[0m[0;34m([0m[0mcompiler[0m[0;34m([0m[0mf[0m[0;34m.[0m[0mread[0m[0;34m([0m[0;34m)[0m[0;34m,[0m [0mfname[0m[0;34m,[0m [0;34m'exec'[0m[0;34m)[0m[0;34m,[0m [0mglob[0m[0;34m,[0m [0mloc[0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 169 [0;31m[0;34m[0m[0m
[0m[0;32m 170 [0;31m[0;31m# Refactor print statements in doctests.[0m[0;34m[0m[0;34m[0m[0;34m[0m[0m
[0m
ipdb> d
> [0;32m/Users/xxx/Documents/CS/利用python进行数据分析/examples/ipython_bug.py[0m(3)[0;36m<module>[0;34m()[0m
[0;32m 1 [0;31m[0ma[0m [0;34m=[0m [0;36m5[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 2 [0;31m[0mb[0m [0;34m=[0m [0;36m6[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m----> 3 [0;31m[0;32massert[0m[0;34m([0m[0ma[0m [0;34m+[0m [0mb[0m [0;34m==[0m [0;36m10[0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m
ipdb> d
*** Newest frame
ipdb> u
> [0;32m/Users/xxxx/opt/anaconda3/lib/python3.8/site-packages/IPython/utils/py3compat.py[0m(168)[0;36mexecfile[0;34m()[0m
[0;32m 166 [0;31m [0;32mwith[0m [0mopen[0m[0;34m([0m[0mfname[0m[0;34m,[0m [0;34m'rb'[0m[0;34m)[0m [0;32mas[0m [0mf[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 167 [0;31m [0mcompiler[0m [0;34m=[0m [0mcompiler[0m [0;32mor[0m [0mcompile[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m--> 168 [0;31m [0mexec[0m[0;34m([0m[0mcompiler[0m[0;34m([0m[0mf[0m[0;34m.[0m[0mread[0m[0;34m([0m[0;34m)[0m[0;34m,[0m [0mfname[0m[0;34m,[0m [0;34m'exec'[0m[0;34m)[0m[0;34m,[0m [0mglob[0m[0;34m,[0m [0mloc[0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 169 [0;31m[0;34m[0m[0m
[0m[0;32m 170 [0;31m[0;31m# Refactor print statements in doctests.[0m[0;34m[0m[0;34m[0m[0;34m[0m[0m
[0m
ipdb> u
*** Oldest frame
ipdb> q
%run examples/ipython_bug.py
---------------------------------------------------------------------------AssertionError Traceback (most recent call last)~/Documents/CS/利用python进行数据分析/examples/ipython_bug.py in <module>13 throws_an_exception()14
---> 15 calling_things()~/Documents/CS/利用python进行数据分析/examples/ipython_bug.py in calling_things()11 def calling_things():12 works_fine()
---> 13 throws_an_exception()14 15 calling_things()~/Documents/CS/利用python进行数据分析/examples/ipython_bug.py in throws_an_exception()7 a = 58 b = 6
----> 9 assert(a + b == 10)10 11 def calling_things():AssertionError:
%debug
> [0;32m/Users/xxx/Documents/CS/利用python进行数据分析/examples/ipython_bug.py[0m(9)[0;36mthrows_an_exception[0;34m()[0m
[0;32m 7 [0;31m [0ma[0m [0;34m=[0m [0;36m5[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 8 [0;31m [0mb[0m [0;34m=[0m [0;36m6[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m----> 9 [0;31m [0;32massert[0m[0;34m([0m[0ma[0m [0;34m+[0m [0mb[0m [0;34m==[0m [0;36m10[0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 10 [0;31m[0;34m[0m[0m
[0m[0;32m 11 [0;31m[0;32mdef[0m [0mcalling_things[0m[0;34m([0m[0;34m)[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[0m
ipdb> u
> [0;32m/Users/xxx/Documents/CS/利用python进行数据分析/examples/ipython_bug.py[0m(13)[0;36mcalling_things[0;34m()[0m
[0;32m 11 [0;31m[0;32mdef[0m [0mcalling_things[0m[0;34m([0m[0;34m)[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 12 [0;31m [0mworks_fine[0m[0;34m([0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m---> 13 [0;31m [0mthrows_an_exception[0m[0;34m([0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 14 [0;31m[0;34m[0m[0m
[0m[0;32m 15 [0;31m[0mcalling_things[0m[0;34m([0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m
ipdb> q
%run -d:打开调试器执行
%run -d examples/ipython_bug.py
Breakpoint 1 at /Users/xxx/Documents/CS/利用python进行数据分析/examples/ipython_bug.py:1
NOTE: Enter 'c' at the ipdb> prompt to continue execution.
> [0;32m/Users/sss/Documents/CS/利用python进行数据分析/examples/ipython_bug.py[0m(1)[0;36m<module>[0;34m()[0m
[1;31m1[0;32m---> 1 [0;31m[0;32mdef[0m [0mworks_fine[0m[0;34m([0m[0;34m)[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 2 [0;31m [0ma[0m [0;34m=[0m [0;36m5[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 3 [0;31m [0mb[0m [0;34m=[0m [0;36m6[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 4 [0;31m [0;32massert[0m[0;34m([0m[0ma[0m [0;34m+[0m [0mb[0m [0;34m==[0m [0;36m11[0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 5 [0;31m[0;34m[0m[0m
[0m
ipdb> s
> [0;32m/Users/xxx/Documents/CS/利用python进行数据分析/examples/ipython_bug.py[0m(6)[0;36m<module>[0;34m()[0m
[0;32m 4 [0;31m [0;32massert[0m[0;34m([0m[0ma[0m [0;34m+[0m [0mb[0m [0;34m==[0m [0;36m11[0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 5 [0;31m[0;34m[0m[0m
[0m[0;32m----> 6 [0;31m[0;32mdef[0m [0mthrows_an_exception[0m[0;34m([0m[0;34m)[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 7 [0;31m [0ma[0m [0;34m=[0m [0;36m5[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 8 [0;31m [0mb[0m [0;34m=[0m [0;36m6[0m[0;34m[0m[0;34m[0m[0m
[0m
ipdb> s
> [0;32m/Users/xxx/Documents/CS/利用python进行数据分析/examples/ipython_bug.py[0m(11)[0;36m<module>[0;34m()[0m
[0;32m 9 [0;31m [0;32massert[0m[0;34m([0m[0ma[0m [0;34m+[0m [0mb[0m [0;34m==[0m [0;36m10[0m[0xxx;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 10 [0;31m[0;34m[0m[0m
[0m[0;32m---> 11 [0;31m[0;32mdef[0m [0mcalling_things[0m[0;34m([0m[0;34m)[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 12 [0;31m [0mworks_fine[0m[0;34m([0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 13 [0;31m [0mthrows_an_exception[0m[0;34m([0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m
ipdb> b 12
Breakpoint 2 at /Users/xxx/Documents/CS/利用python进行数据分析/examples/ipython_bug.py:12
ipdb> c
> [0;32m/Users/xxx/Documents/CS/利用python进行数据分析/examples/ipython_bug.py[0m(12)[0;36mcalling_things[0;34m()[0m
[0;32m 10 [0;31m[0;34m[0m[0m
[0m[0;32m 11 [0;31m[0;32mdef[0m [0mcalling_things[0m[0;34m([0m[0;34m)[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[0m[1;31m2[0;32m--> 12 [0;31m [0mworks_fine[0m[0;34m([0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 13 [0;31m [0mthrows_an_exception[0m[0;34m([0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 14 [0;31m[0;34m[0m[0m
[0m
ipdb> n
> [0;32m/Users/xxx/Documents/CS/利用python进行数据分析/examples/ipython_bug.py[0m(13)[0;36mcalling_things[0;34m()[0m
[0;32m 11 [0;31m[0;32mdef[0m [0mcalling_things[0m[0;34m([0m[0;34m)[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[0m[1;31m2[0;32m 12 [0;31m [0mworks_fine[0m[0;34m([0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m---> 13 [0;31m [0mthrows_an_exception[0m[0;34m([0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 14 [0;31m[0;34m[0m[0m
[0m[0;32m 15 [0;31m[0mcalling_things[0m[0;34m([0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m
ipdb> s
--Call--
> [0;32m/Users/xxx/Documents/CS/利用python进行数据分析/examples/ipython_bug.py[0m(6)[0;36mthrows_an_exception[0;34m()[0m
[0;32m 4 [0;31m [0;32massert[0m[0;34m([0m[0ma[0m [0;34m+[0m [0mb[0m [0;34m==[0m [0;36m11[0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 5 [0;31m[0;34m[0m[0m
[0m[0;32m----> 6 [0;31m[0;32mdef[0m [0mthrows_an_exception[0m[0;34m([0m[0;34m)[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 7 [0;31m [0ma[0m [0;34m=[0m [0;36m5[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 8 [0;31m [0mb[0m [0;34m=[0m [0;36m6[0m[0;34m[0m[0;34m[0m[0m
[0m
ipdb> n
> [0;32m/Users/xxx/Documents/CS/利用python进行数据分析/examples/ipython_bug.py[0m(7)[0;36mthrows_an_exception[0;34m()[0m
[0;32m 5 [0;31m[0;34m[0m[0m
[0m[0;32m 6 [0;31m[0;32mdef[0m [0mthrows_an_exception[0m[0;34m([0m[0;34m)[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m----> 7 [0;31m [0ma[0m [0;34m=[0m [0;36m5[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 8 [0;31m [0mb[0m [0;34m=[0m [0;36m6[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 9 [0;31m [0;32massert[0m[0;34m([0m[0ma[0m [0;34m+[0m [0mb[0m [0;34m==[0m [0;36m10[0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m
ipdb> n
> [0;32m/Users/xxx/Documents/CS/利用python进行数据分析/examples/ipython_bug.py[0m(8)[0;36mthrows_an_exception[0;34m()[0m
[0;32m 6 [0;31m[0;32mdef[0m [0mthrows_an_exception[0m[0;34m([0m[0;34m)[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 7 [0;31m [0ma[0m [0;34m=[0m [0;36m5[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m----> 8 [0;31m [0mb[0m [0;34m=[0m [0;36m6[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 9 [0;31m [0;32massert[0m[0;34m([0m[0ma[0m [0;34m+[0m [0mb[0m [0;34m==[0m [0;36m10[0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 10 [0;31m[0;34m[0m[0m
[0m
ipdb>
> [0;32m/Users/xxx/Documents/CS/利用python进行数据分析/examples/ipython_bug.py[0m(9)[0;36mthrows_an_exception[0;34m()[0m
[0;32m 7 [0;31m [0ma[0m [0;34m=[0m [0;36m5[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 8 [0;31m [0mb[0m [0;34m=[0m [0;36m6[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m----> 9 [0;31m [0;32massert[0m[0;34m([0m[0ma[0m [0;34m+[0m [0mb[0m [0;34m==[0m [0;36m10[0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 10 [0;31m[0;34m[0m[0m
[0m[0;32m 11 [0;31m[0;32mdef[0m [0mcalling_things[0m[0;34m([0m[0;34m)[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[0m
ipdb> !a
5
ipdb> !b
6
ipdb> q
在调试器模式下:
b + 行号:设置断点;c:运行直到断点位置;n:执行到下一行;s:进入脚本(函数);!变量:检查变量内容;q: 退出;
3.1.1 调试器的其他用途
%pdb
Automatic pdb calling has been turned ON
%pdb
Automatic pdb calling has been turned OFF
# 将常用的技巧添加进IPython配置文件
from IPython.core.debugger import Pdb# 第一个函数set_trace很简单,你可以将它放在代码中任何希望停下来查看一番的地方
def set_trace():import sysPdb().set_trace(sys._getframe().f_back)# 第二个函数(debug),使你能够直接在任意函数上使用调试器。
def debug(f, *args, **kwargs):pdb = Pdb()return pdb.runcall(f, *args, **kwargs)
对于原来的py文件修改:
def works_fine():a = 5b = 6assert(a + b == 11)def throws_an_exception():a = 5b = 6assert(a + b == 10)def f(x, y, z=1):tmp = x + yreturn tmp / zdef set_trace():from IPython.core.debugger import Pdbimport sysPdb().set_trace(sys._getframe().f_back)def debug(f, *args, **kwargs):from IPython.core.debugger import Pdbpdb = Pdb()return pdb.runcall(f, *args, **kwargs)def calling_things():set_trace() #自定义的调试函数works_fine()throws_an_exception()calling_things()
run examples/ipython_bug.py
> [0;32m/Users/xxx/Documents/CS/利用python进行数据分析/examples/ipython_bug.py[0m(27)[0;36mcalling_things[0;34m()[0m
[0;32m 25 [0;31m[0;32mdef[0m [0mcalling_things[0m[0;34m([0m[0;34m)[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 26 [0;31m [0mset_trace[0m[0;34m([0m[0;34m)[0m [0;31m#自定义的调试函数[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m---> 27 [0;31m [0mworks_fine[0m[0;34m([0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 28 [0;31m [0mthrows_an_exception[0m[0;34m([0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 29 [0;31m[0;34m[0m[0m
[0m
ipdb> c---------------------------------------------------------------------------AssertionError Traceback (most recent call last)~/Documents/CS/利用python进行数据分析/examples/ipython_bug.py in <module>28 throws_an_exception()29
---> 30 calling_things()31 ~/Documents/CS/利用python进行数据分析/examples/ipython_bug.py in calling_things()25 def calling_things():26 set_trace() #自定义的调试函数
---> 27 works_fine()28 throws_an_exception()29 ~/Documents/CS/利用python进行数据分析/examples/ipython_bug.py in throws_an_exception()7 a = 58 b = 6
----> 9 assert(a + b == 10)10 11 def f(x, y, z=1):AssertionError:
%debug
> [0;32m/Users/xxx/Documents/CS/利用python进行数据分析/examples/ipython_bug.py[0m(9)[0;36mthrows_an_exception[0;34m()[0m
[0;32m 7 [0;31m [0ma[0m [0;34m=[0m [0;36m5[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 8 [0;31m [0mb[0m [0;34m=[0m [0;36m6[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m----> 9 [0;31m [0;32massert[0m[0;34m([0m[0ma[0m [0;34m+[0m [0mb[0m [0;34m==[0m [0;36m10[0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 10 [0;31m[0;34m[0m[0m
[0m[0;32m 11 [0;31m[0;32mdef[0m [0mf[0m[0;34m([0m[0mx[0m[0;34m,[0m [0my[0m[0;34m,[0m [0mz[0m[0;34m=[0m[0;36m1[0m[0;34m)[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[0m
ipdb> !debug(f, 1, 2, z=3)
> [0;32m/Users/xxx/Documents/CS/利用python进行数据分析/examples/ipython_bug.py[0m(12)[0;36mf[0;34m()[0m
[0;32m 10 [0;31m[0;34m[0m[0m
[0m[0;32m 11 [0;31m[0;32mdef[0m [0mf[0m[0;34m([0m[0mx[0m[0;34m,[0m [0my[0m[0;34m,[0m [0mz[0m[0;34m=[0m[0;36m1[0m[0;34m)[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m---> 12 [0;31m [0mtmp[0m [0;34m=[0m [0mx[0m [0;34m+[0m [0my[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 13 [0;31m [0;32mreturn[0m [0mtmp[0m [0;34m/[0m [0mz[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 14 [0;31m[0;34m[0m[0m
[0m
ipdb> c
1.0
ipdb> c
def f(x, y, z=1):tmp = x + yreturn tmp / z
# 打开pdb运行-d,并设置断点-b
%run -d -b27 examples/ipython_bug.py
Breakpoint 1 at /Users/xxx/Documents/CS/利用python进行数据分析/examples/ipython_bug.py:27
NOTE: Enter 'c' at the ipdb> prompt to continue execution.
> [0;32m/Users/xxx/Documents/CS/利用python进行数据分析/examples/ipython_bug.py[0m(1)[0;36m<module>[0;34m()[0m
[0;32m----> 1 [0;31m[0;32mdef[0m [0mworks_fine[0m[0;34m([0m[0;34m)[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 2 [0;31m [0ma[0m [0;34m=[0m [0;36m5[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 3 [0;31m [0mb[0m [0;34m=[0m [0;36m6[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 4 [0;31m [0;32massert[0m[0;34m([0m[0ma[0m [0;34m+[0m [0mb[0m [0;34m==[0m [0;36m11[0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 5 [0;31m[0;34m[0m[0m
[0m
ipdb> c
> [0;32m/Users/xxx/Documents/CS/利用python进行数据分析/examples/ipython_bug.py[0m(27)[0;36mcalling_things[0;34m()[0m
[0;32m 25 [0;31m[0;32mdef[0m [0mcalling_things[0m[0;34m([0m[0;34m)[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 26 [0;31m [0mset_trace[0m[0;34m([0m[0;34m)[0m [0;31m#自定义的调试函数[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m---> 27 [0;31m [0mworks_fine[0m[0;34m([0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 28 [0;31m [0mthrows_an_exception[0m[0;34m([0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[0;32m 29 [0;31m[0;34m[0m[0m
[0m
ipdb> c
[0;31m---------------------------------------------------------------------------[0m
[0;31mAssertionError[0m Traceback (most recent call last)
[0;32m~/opt/anaconda3/lib/python3.8/site-packages/IPython/core/interactiveshell.py[0m in [0;36msafe_execfile[0;34m(self, fname, exit_ignore, raise_exceptions, shell_futures, *where)[0m
[1;32m 2755[0m [0;32mtry[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[1;32m 2756[0m [0mglob[0m[0;34m,[0m [0mloc[0m [0;34m=[0m [0;34m([0m[0mwhere[0m [0;34m+[0m [0;34m([0m[0;32mNone[0m[0;34m,[0m [0;34m)[0m[0;34m)[0m[0;34m[[0m[0;34m:[0m[0;36m2[0m[0;34m][0m[0;34m[0m[0;34m[0m[0m
[0;32m-> 2757[0;31m py3compat.execfile(
[0m[1;32m 2758[0m [0mfname[0m[0;34m,[0m [0mglob[0m[0;34m,[0m [0mloc[0m[0;34m,[0m[0;34m[0m[0;34m[0m[0m
[1;32m 2759[0m self.compile if shell_futures else None)[0;32m~/opt/anaconda3/lib/python3.8/site-packages/IPython/utils/py3compat.py[0m in [0;36mexecfile[0;34m(fname, glob, loc, compiler)[0m
[1;32m 166[0m [0;32mwith[0m [0mopen[0m[0;34m([0m[0mfname[0m[0;34m,[0m [0;34m'rb'[0m[0;34m)[0m [0;32mas[0m [0mf[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[1;32m 167[0m [0mcompiler[0m [0;34m=[0m [0mcompiler[0m [0;32mor[0m [0mcompile[0m[0;34m[0m[0;34m[0m[0m
[0;32m--> 168[0;31m [0mexec[0m[0;34m([0m[0mcompiler[0m[0;34m([0m[0mf[0m[0;34m.[0m[0mread[0m[0;34m([0m[0;34m)[0m[0;34m,[0m [0mfname[0m[0;34m,[0m [0;34m'exec'[0m[0;34m)[0m[0;34m,[0m [0mglob[0m[0;34m,[0m [0mloc[0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[1;32m 169[0m [0;34m[0m[0m
[1;32m 170[0m [0;31m# Refactor print statements in doctests.[0m[0;34m[0m[0;34m[0m[0;34m[0m[0m[0;32m~/Documents/CS/利用python进行数据分析/examples/ipython_bug.py[0m in [0;36m<module>[0;34m[0m
[1;32m 28[0m [0mthrows_an_exception[0m[0;34m([0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[1;32m 29[0m [0;34m[0m[0m
[0;32m---> 30[0;31m [0mcalling_things[0m[0;34m([0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[1;32m 31[0m [0;34m[0m[0m[0;32m~/Documents/CS/利用python进行数据分析/examples/ipython_bug.py[0m in [0;36mcalling_things[0;34m()[0m
[1;32m 25[0m [0;32mdef[0m [0mcalling_things[0m[0;34m([0m[0;34m)[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[1;32m 26[0m [0mset_trace[0m[0;34m([0m[0;34m)[0m [0;31m#自定义的调试函数[0m[0;34m[0m[0;34m[0m[0m
[0;32m---> 27[0;31m [0mworks_fine[0m[0;34m([0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[1;32m 28[0m [0mthrows_an_exception[0m[0;34m([0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[1;32m 29[0m [0;34m[0m[0m[0;32m~/Documents/CS/利用python进行数据分析/examples/ipython_bug.py[0m in [0;36mthrows_an_exception[0;34m()[0m
[1;32m 7[0m [0ma[0m [0;34m=[0m [0;36m5[0m[0;34m[0m[0;34m[0m[0m
[1;32m 8[0m [0mb[0m [0;34m=[0m [0;36m6[0m[0;34m[0m[0;34m[0m[0m
[0;32m----> 9[0;31m [0;32massert[0m[0;34m([0m[0ma[0m [0;34m+[0m [0mb[0m [0;34m==[0m [0;36m10[0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[1;32m 10[0m [0;34m[0m[0m
[1;32m 11[0m [0;32mdef[0m [0mf[0m[0;34m([0m[0mx[0m[0;34m,[0m [0my[0m[0;34m,[0m [0mz[0m[0;34m=[0m[0;36m1[0m[0;34m)[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m[0;31mAssertionError[0m:
3.2 对代码测时: %time 和 %timeit
import numpy as np
# 通常的时间测试方式
import time
iterations = 5
start = time.time()
for i in range(iterations):np.random.randn(10000, 10000).mean(axis=1)
elapsed_per = (time.time() - start) / iterations
print(elapsed_per)
2.748708629608154
魔术命令:%time一次运行一条语句(即只测试运行一次的时间),报告总执行时间。
strings = ['foo', 'foobar', 'baz', 'qux', 'python', 'Guido Van Rossum'] * 100000
%time method1 = [x for x in strings if x.startswith('foo')]
CPU times: user 84.4 ms, sys: 2.98 ms, total: 87.4 ms
Wall time: 86.2 ms
%time method2 = [x for x in strings if x[:3] == 'foo']
CPU times: user 69.8 ms, sys: 2.64 ms, total: 72.4 ms
Wall time: 71.4 ms
其中,Wall time
是wall-clock time
的简写,表示壁钟时,是要关注的数字。
与%time相比%timeit可以平均多次结果,从而更加准确。
%timeit method1 = [x for x in strings if x.startswith('foo')]
69.4 ms ± 2.1 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
%timeit method2 = [x for x in strings if x[:3] == 'foo']
51.5 ms ± 984 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
x = 'foobar'
y = 'foo'
%timeit x.startswith(y)
121 ns ± 12.5 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
%timeit x[:3] == y
117 ns ± 8.42 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
3.3 基础分析:%prun和%run -p
python自身的分析工具cProfile模块可以在命令行运行整个程序,并输出每个函数的聚合时间。
import numpy as np
from numpy.linalg import eigvalsdef run_experiment(niter=100):K = 100results = []for _ in range(niter):mat = np.random.randn(K, K)max_eigenvalue = np.abs(eigvals(mat)).max()results.append(max_eigenvalue)return results
some_results = run_experiment()
print(f'Largest one we saw:{np.max(some_results)}')
Largest one we saw: 11.393466801031785
# 上面代码的脚本
%run -m cProfile examples/cprof_example.py
# 命令行中可以改为:python -m cProfile examples/cprof_example.py
Largest one we saw: 11.817100523804414151 function calls (4051 primitive calls) in 0.192 secondsOrdered by: standard namencalls tottime percall cumtime percall filename:lineno(function)100 0.000 0.000 0.002 0.000 <__array_function__ internals>:2(all)1 0.000 0.000 0.000 0.000 <__array_function__ internals>:2(amax)100 0.000 0.000 0.162 0.002 <__array_function__ internals>:2(eigvals)1 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:1017(_handle_fromlist)100 0.000 0.000 0.000 0.000 _asarray.py:23(asarray)100 0.000 0.000 0.001 0.000 _methods.py:37(_amax)100 0.000 0.000 0.001 0.000 _methods.py:59(_all)1 0.000 0.000 0.192 0.192 cprof_example.py:1(<module>)1 0.001 0.001 0.192 0.192 cprof_example.py:4(run_experiment)100 0.000 0.000 0.000 0.000 fromnumeric.py:2350(_all_dispatcher)100 0.000 0.000 0.001 0.000 fromnumeric.py:2355(all)1 0.000 0.000 0.000 0.000 fromnumeric.py:2612(_amax_dispatcher)1 0.000 0.000 0.000 0.000 fromnumeric.py:2617(amax)101 0.000 0.000 0.001 0.000 fromnumeric.py:70(_wrapreduction)101 0.000 0.000 0.000 0.000 fromnumeric.py:71(<dictcomp>)3 0.000 0.000 0.000 0.000 iostream.py:197(schedule)2 0.000 0.000 0.000 0.000 iostream.py:310(_is_master_process)2 0.000 0.000 0.000 0.000 iostream.py:323(_schedule_flush)2 0.000 0.000 0.000 0.000 iostream.py:386(write)3 0.000 0.000 0.000 0.000 iostream.py:93(_event_pipe)100 0.000 0.000 0.000 0.000 linalg.py:102(get_linalg_error_extobj)100 0.000 0.000 0.000 0.000 linalg.py:107(_makearray)300 0.000 0.000 0.000 0.000 linalg.py:112(isComplexType)100 0.000 0.000 0.000 0.000 linalg.py:125(_realType)100 0.000 0.000 0.000 0.000 linalg.py:128(_complexType)100 0.000 0.000 0.000 0.000 linalg.py:135(_commonType)100 0.000 0.000 0.000 0.000 linalg.py:193(_assert_stacked_2d)100 0.000 0.000 0.000 0.000 linalg.py:199(_assert_stacked_square)100 0.001 0.000 0.001 0.000 linalg.py:205(_assert_finite)100 0.000 0.000 0.000 0.000 linalg.py:472(_unary_dispatcher)100 0.158 0.002 0.162 0.002 linalg.py:988(eigvals)3 0.000 0.000 0.000 0.000 socket.py:432(send)3 0.000 0.000 0.000 0.000 threading.py:1017(_wait_for_tstate_lock)3 0.000 0.000 0.000 0.000 threading.py:1071(is_alive)3 0.000 0.000 0.000 0.000 threading.py:513(is_set)1 0.000 0.000 0.192 0.192 {built-in method builtins.exec}101 0.000 0.000 0.000 0.000 {built-in method builtins.getattr}1 0.000 0.000 0.000 0.000 {built-in method builtins.hasattr}3 0.000 0.000 0.000 0.000 {built-in method builtins.isinstance}400 0.000 0.000 0.000 0.000 {built-in method builtins.issubclass}1 0.000 0.000 0.000 0.000 {built-in method builtins.print}100 0.000 0.000 0.000 0.000 {built-in method numpy.array}201/101 0.000 0.000 0.162 0.002 {built-in method numpy.core._multiarray_umath.implement_array_function}2 0.000 0.000 0.000 0.000 {built-in method posix.getpid}3 0.000 0.000 0.000 0.000 {method 'acquire' of '_thread.lock' objects}100 0.000 0.000 0.001 0.000 {method 'all' of 'numpy.ndarray' objects}3 0.000 0.000 0.000 0.000 {method 'append' of 'collections.deque' objects}100 0.000 0.000 0.000 0.000 {method 'append' of 'list' objects}100 0.000 0.000 0.000 0.000 {method 'astype' of 'numpy.ndarray' objects}1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}200 0.000 0.000 0.000 0.000 {method 'get' of 'dict' objects}101 0.000 0.000 0.000 0.000 {method 'items' of 'dict' objects}100 0.000 0.000 0.001 0.000 {method 'max' of 'numpy.ndarray' objects}100 0.028 0.000 0.028 0.000 {method 'randn' of 'numpy.random.mtrand.RandomState' objects}301 0.002 0.000 0.002 0.000 {method 'reduce' of 'numpy.ufunc' objects}
%run -m cProfile -s cumulative examples/cprof_example.py
Largest one we saw: 11.666324556512084151 function calls (4051 primitive calls) in 0.185 secondsOrdered by: cumulative timencalls tottime percall cumtime percall filename:lineno(function)1 0.000 0.000 0.185 0.185 {built-in method builtins.exec}1 0.000 0.000 0.185 0.185 cprof_example.py:1(<module>)1 0.002 0.002 0.185 0.185 cprof_example.py:4(run_experiment)100 0.000 0.000 0.156 0.002 <__array_function__ internals>:2(eigvals)201/101 0.000 0.000 0.155 0.002 {built-in method numpy.core._multiarray_umath.implement_array_function}100 0.152 0.002 0.155 0.002 linalg.py:988(eigvals)100 0.027 0.000 0.027 0.000 {method 'randn' of 'numpy.random.mtrand.RandomState' objects}301 0.001 0.000 0.001 0.000 {method 'reduce' of 'numpy.ufunc' objects}100 0.001 0.000 0.001 0.000 linalg.py:205(_assert_finite)100 0.000 0.000 0.001 0.000 <__array_function__ internals>:2(all)100 0.000 0.000 0.001 0.000 fromnumeric.py:2355(all)101 0.000 0.000 0.001 0.000 fromnumeric.py:70(_wrapreduction)100 0.000 0.000 0.001 0.000 {method 'max' of 'numpy.ndarray' objects}100 0.000 0.000 0.001 0.000 {method 'all' of 'numpy.ndarray' objects}100 0.000 0.000 0.001 0.000 _methods.py:37(_amax)100 0.000 0.000 0.001 0.000 _methods.py:59(_all)100 0.000 0.000 0.000 0.000 linalg.py:135(_commonType)100 0.000 0.000 0.000 0.000 linalg.py:107(_makearray)100 0.000 0.000 0.000 0.000 {method 'astype' of 'numpy.ndarray' objects}300 0.000 0.000 0.000 0.000 linalg.py:112(isComplexType)100 0.000 0.000 0.000 0.000 _asarray.py:23(asarray)100 0.000 0.000 0.000 0.000 linalg.py:102(get_linalg_error_extobj)1 0.000 0.000 0.000 0.000 {built-in method builtins.print}2 0.000 0.000 0.000 0.000 iostream.py:386(write)100 0.000 0.000 0.000 0.000 linalg.py:199(_assert_stacked_square)101 0.000 0.000 0.000 0.000 fromnumeric.py:71(<dictcomp>)3 0.000 0.000 0.000 0.000 iostream.py:197(schedule)100 0.000 0.000 0.000 0.000 linalg.py:128(_complexType)400 0.000 0.000 0.000 0.000 {built-in method builtins.issubclass}100 0.000 0.000 0.000 0.000 linalg.py:193(_assert_stacked_2d)100 0.000 0.000 0.000 0.000 linalg.py:125(_realType)100 0.000 0.000 0.000 0.000 {built-in method numpy.array}3 0.000 0.000 0.000 0.000 socket.py:432(send)200 0.000 0.000 0.000 0.000 {method 'get' of 'dict' objects}101 0.000 0.000 0.000 0.000 {built-in method builtins.getattr}100 0.000 0.000 0.000 0.000 fromnumeric.py:2350(_all_dispatcher)101 0.000 0.000 0.000 0.000 {method 'items' of 'dict' objects}100 0.000 0.000 0.000 0.000 linalg.py:472(_unary_dispatcher)1 0.000 0.000 0.000 0.000 <__array_function__ internals>:2(amax)100 0.000 0.000 0.000 0.000 {method 'append' of 'list' objects}1 0.000 0.000 0.000 0.000 fromnumeric.py:2617(amax)3 0.000 0.000 0.000 0.000 threading.py:1071(is_alive)2 0.000 0.000 0.000 0.000 iostream.py:323(_schedule_flush)3 0.000 0.000 0.000 0.000 threading.py:1017(_wait_for_tstate_lock)1 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:1017(_handle_fromlist)2 0.000 0.000 0.000 0.000 iostream.py:310(_is_master_process)3 0.000 0.000 0.000 0.000 iostream.py:93(_event_pipe)3 0.000 0.000 0.000 0.000 {method 'acquire' of '_thread.lock' objects}3 0.000 0.000 0.000 0.000 {built-in method builtins.isinstance}2 0.000 0.000 0.000 0.000 {built-in method posix.getpid}3 0.000 0.000 0.000 0.000 {method 'append' of 'collections.deque' objects}3 0.000 0.000 0.000 0.000 threading.py:513(is_set)1 0.000 0.000 0.000 0.000 {built-in method builtins.hasattr}1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}1 0.000 0.000 0.000 0.000 fromnumeric.py:2612(_amax_dispatcher)
其中的cumtime表示每个函数话费的总时间。
在IPython中,可以使用%prun或者%run -p完成此功能。会有独立窗口出现。
%prun run_experiment()
前7行结果
%prun -l 7 run_experiment()
排序方式
%prun -l 7 -s cumulative run_experiment()
%run -p -s cumulative examples/cprof_example.py
Largest one we saw: 11.420482039182037
%%prun run_experiment()
UsageError: %%prun is a cell magic, but the cell body is empty. Did you mean the line magic %prun (single %)?
jupyter中,可以使用%%prun来分析单个的代码块
%%prun -s cumulative
import numpy as np
from numpy.linalg import eigvalsdef run_experiment(niter=100):K = 100results = []for _ in range(niter):mat = np.random.randn(K, K)max_eigenvalue = np.abs(eigvals(mat)).max()results.append(max_eigenvalue)return results
some_results = run_experiment()
print(f'Largest one we saw:{np.max(some_results)}')
Largest one we saw: 12.581609374118653
一个好用的运行时间的可视化工具SnakeViz
pip install snakeviz
Collecting snakevizDownloading snakeviz-2.1.1-py2.py3-none-any.whl (282 kB)
[K |████████████████████████████████| 282 kB 1.1 MB/s eta 0:00:01
[?25hRequirement already satisfied: tornado>=2.0 in /Users/xxx/opt/anaconda3/lib/python3.8/site-packages (from snakeviz) (6.1)
Installing collected packages: snakeviz
Successfully installed snakeviz-2.1.1
Note: you may need to restart the kernel to use updated packages.
%load_ext snakeviz
%%snakeviz
import numpy as np
from numpy.linalg import eigvalsdef run_experiment(niter=100):K = 100results = []for _ in range(niter):mat = np.random.randn(K, K)max_eigenvalue = np.abs(eigvals(mat)).max()results.append(max_eigenvalue)return results
some_results = run_experiment()
print(f'Largest one we saw:{np.max(some_results)}')
Largest one we saw: 12.068346019407974*** Profile stats marshalled to file '/var/folders/bj/9d8bzmns5q936gy102k3t0m40000gn/T/tmppa3ok_kq'.
Embedding SnakeViz in this document...
%snakeviz run_experiment()
*** Profile stats marshalled to file '/var/folders/bj/9d8bzmns5q936gy102k3t0m40000gn/T/tmpukezgj5q'.
Embedding SnakeViz in this document...
3.4 逐行分析函数
%lprun可以对一个或者多个函数进行逐行分析
一般语法为:%lprun -f func1 -f func2 statement_to_profile
pip install line_profiler
Collecting line_profilerDownloading line_profiler-3.5.1-cp38-cp38-macosx_10_9_x86_64.whl (53 kB)
[K |████████████████████████████████| 53 kB 842 kB/s eta 0:00:01
[?25hInstalling collected packages: line-profiler
Successfully installed line-profiler-3.5.1
Note: you may need to restart the kernel to use updated packages.
%load_ext line_profiler
The line_profiler extension is already loaded. To reload it, use:%reload_ext line_profiler
import numpy as npdef add_and_sum(x, y):added = x + ysummed = added.sum(axis=1)return summeddef call_function():x = np.random.randn(1000, 1000)y = np.random.randn(1000, 1000)return add_and_sum(x, y)
x = np.random.randn(3000, 3000)
y = np.random.randn(3000, 3000)
%prun add_and_sum(x, y)
%lprun -f add_and_sum add_and_sum(x, y)
%lprun -f add_and_sum -f call_function call_function()
4. 使用IPython进行高效代码开发的技巧
4.1 重载模块依赖项
注意依赖库的重载问题
4.2 代码设计技巧
if __name__ == '__main__':main()
- 扁平化
- balance between 多的小文件 and 少的大文件
5. 高阶IPython特性
5.1 定义IPython友好的类
class Message:def __init__(self, msg):self.msg = msg
x = Message('I have a secrete')
x
<__main__.Message at 0x7fad92258820>
class Message:def __init__(self, msg):self.msg = msgdef __repr__(self):return 'Message: %s' % self.msg
x = Message('I have a secrete')
x
Message: I have a secrete
IPython cheatsheet相关推荐
- Anaconda3-5.0.1 输入ipython 出现 ImportError: cannot import name ‘create_prompt_application‘
在 Windows 系统上安装 Anaconda3-5.0.1 版本后,输入 ipython 结果出现如下错误: (G:\Anaconda3-5.0.1\install) C:\Users\wohu& ...
- IPython 更改默认字体大小
安装 IPython 之后发现默认的字体太小,不方便使用,故用以下方法进行修改默认字体大小. 默认的字体如下图所示: 修改方法 在命令行输入 ipython profile create 找到 ipy ...
- Ipython的Window与Linux详细安装
IPython 是一个 python 的交互式 shell,支持补全等等一些强大的功能: IPython 为交互式计算提供了一个丰富的架构,包含: 强大的交互式 shell Jupyter 内核 交互 ...
- Ubuntu 安装 IPython、jupyter notebook
1. 升级 pip sudo pip3 install --upgrade pip 2. 安装 IPython IPython 5.x 是最后一个支持 Python2 的 IPython . sudo ...
- Windows Python3.6 安装 IPython(Jupyter) qtconsole
确保 Python3.6 已经成功安装 分别执行以下步骤: python –m pip install ipython python –m pip install pygments python –m ...
- 在Mac上使用pip3安装交互式环境IPython实录
简介 IPython 是一个 python 的交互式 shell,比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许多很有用的功能和函数 ...
- Ubuntu 14.04 64bit上使用IPython玩转Docker
下面是我根据参考文献来实践, 使用IPython调用Docker容器的记录, 仅供参考: 首先需要安装好IPython(可以参见前面的博客文章)和docker-py: sudo pip instal ...
- Ubuntu 14.04 64bit安装IPython
pip是python的一个包管理工具,很多包都可以用这个来管理,首先安装pip sudo apt-get install python-pip IPython 终端与其他相比更为强大,提供智能的自动补 ...
- bpython ipython_安装ipython后命令找不到ipython bpython -bash: *python: command not found
原博文 2018-10-30 21:53 − ipython bpython -bash: *python: command not found 问题: 当pip安装ipython, bpython后 ...
最新文章
- 【java新】Optional pk 空指针
- antdesign 所兼容的浏览器_Edge 87.0最新离线稳定版浏览器
- java有画图的库吗_Java画图
- Excel Oledb设置
- MySQL字符串长度
- 十进制数与八进制数互相转换(MATLAB和C版本)
- Codeforces 1070A Find a Number(BFS) 2018-2019 ICPC, NEERC, Southern Subregional Contest Problem A
- oracle杀死进程时权限不足_在oracle中创建函数时权限不足
- Go语言---面向对象编程
- python能做什么-普通小白学会Python到底具体能做什么呢?
- MySQL 批量修改数据库的字符集和排序规则
- Visual Studio 2010 中编写C代码的一些常见问题
- 拓端tecdat|R语言做复杂金融产品的几何布朗运动的模拟
- ImportError: Could not find the DLL(s) ‘msvcp140_1.dll‘. TensorFlow requires that these DLLs be inst
- tkinter 中给某个文本加上滚动条_python中wx模块的具体使用方法
- 通讯录制作(.csv文件转.vcf文件即vcard格式)
- 数字地-DGND与模拟-AGND地的大学问
- 到底要学前端还是后端?
- Gnuplot 常用命令
- 2021.03.17 pokémon小游戏开发记录与周总结