Python数据科学手册笔记:IPython
Ipython帮助文档
在ipython里面,有时需要去查询一个python对象,这个时候可以利用一些快捷符号来获得。
用符号?来查来文档
每一个python对象都有一个字符串的引用,即docstring,大多数情况下,这个部分会简要介绍和使用方法。Python内置一个help() 函数可以获取这些信息,并打印输出结果。
help(len)
-------------------------------------------------
Help on built-in function len in module builtins:
len(obj, /)
    Return the number of items in a container.
在ipython中,可以直接在对象后面加一个? 来获取:
len?
-------------------------------------------------
Signature: len(obj, /)
Docstring: Return the number of items in a container.
Type:      builtin_function_or_method
用??来获取源代码
我们可以通过?? 来直接查询源代码:
In [1]: def square(a):
   ...:     '''Return the square of a'''
   ...:     return a ** 2
# ??来查看源码
In [2]: square??
Signature: square(a)
Source:
def square(a):
    '''Return the square of a'''
    return a ** 2
File:      c:\users\<ipython-input-7-bc38739afe33>
Type:      function
如果你用?? 发现它并不显示源码,说明它不是用python写的,而可能是用别的语言写的,比如len 这种
In [3]: len??
Signature: len(obj, /)
Docstring: Return the number of items in a container.
Type:      builtin_function_or_method
补全方法
这里有两种方法可以补全,一种是利用tab ,一种是利用通配符
利用tab
可以在输入对象名称,再加上一个句号. 和tab键
In [10]: L = [1,2,3]
In [11]: L.<tab>
            append()  count()   insert()  reverse()
            clear()   extend()  pop()     sort()
            copy()    index()   remove()
在列表中会通常屏蔽掉私有方法(虽然python实际没有这样特别实现方法),我们可以加_ 下划线让它展示出来
In [11]: L.__<tab>
  __add__             __delattr__         __eq__              __getitem__()       __imul__
  __class__           __delitem__         __format__()        __gt__              __init__
  __class_getitem__() __dir__()           __ge__              __hash__            __init_subclass__() >
  __contains__        __doc__             __getattribute__    __iadd__            __iter__
在导入包时候,这个也可以帮助查找对象。
In [11]: import itertools import c<tab>
  calendar           cgitb              cmd                collections        commctrl           contextlib
  certifi            charset_normalizer code               colorama           compileall         contextvars
  cffi               chunk              codecs             colorsys           concurrent         copy               >
  cgi                cmath              codeop             comm               configparser       copyreg
但是tab有一个问题是,你必须记住前面的字母,但是如果你只是记住了后面字母,tab就无法使用了,这里就需要使用通配符。
利用*加?来补全
可以在字母前用*来搜索:
In [12]: *Warning?
BytesWarning
DeprecationWarning
EncodingWarning
FutureWarning
ImportWarning
PendingDeprecationWarning
ResourceWarning
RuntimeWarning
SyntaxWarning
UnicodeWarning
UserWarning
Warning
Ipython快捷键
| 类别 | 快捷键 | 动作 | 
|---|---|---|
| 导航快捷键 | Ctrl+a | 光标移动本行开始 | 
| Ctrl+e | 光标移动本行结尾 | |
| Ctrl+b(或者左箭头) | 将光标回退一个字符 | |
| Ctrl+f(或者右箭头) | 将光标前进一个字符 | |
| 文本输入快捷键 | Ctrl+d | 删除后一个字符 | 
| Ctrl+k | 从光标开始剪切至行末尾 | |
| Ctrl+u | 从行的开头剪切至光标 | |
| Ctrl+y | 粘贴之前剪切的文本 | |
| Ctrl+t | 交换前两个字符 | |
| 历史快捷键 | Ctrl+p(向上箭头) | 取前一个历史命令 | 
| Ctrl+n(向下箭头) | 取后一个历史命令 | |
| Ctrl+r | 对历史命令反向搜索 | |
| 其他快捷键 | Ctrl+l | 清除终端屏幕内容 | 
| Ctrl+c | 中断当前命令 | |
| Ctrl+d | 退出会话 | 
Ipython魔法命令
粘贴代码块
有时候从网站复制代码块的时候,会发现一些不可预料的错误,比如包含缩进和解释符号。一个常见的解决方法是之前写一个%paste 。如果交互的化,就可以用cpaste
执行外部代码
在使用Ipython的时候,如果想使用外部编写的脚本,就可以使用%run 。比如有一个test.py 我们可以使用:
%run test.py
计算代码运行时间
在运行代码前加一个time 或者timeit 来计算。
In [19]: %time [ i for i in range(2)]
CPU times: total: 0 ns
Wall time: 0 ns
Out[19]: [0, 1]
In [20]: %timeit [ i for i in range(2)]
267 ns ± 32.4 ns per loop (mean ± std. dev. of 7 runs, 1,000,000 loops each)
特别说明一点,如果你的语句很复杂,timeit 就会自动调整,不会执行那么多次了。
内存分析
这个要选安装pip install memory_profiler
利用Ipython导入扩展
%load_ext memory_profiler
然后可以用memit 来查看内存
%memit sum_of_list(10000)
如果想逐行, 就使用mprun ,但是这个只对独立内部函数有效,所以要用%%file 创建简单模块,将该模块命为x.py。
%%file x.py
...
from x import function
%mprun -f function
魔法函数帮助
如果想查询魔法函数使用,也可以后面加个?号
In [21]: %time?
Docstring:
Time execution of a Python statement or expression.
...(省略)
魔法函数通用描述以及一些示例:
%magic
如果魔法函数列表:
%lsmagic
错误和调试
控制异常:%xmode
%xmode 有Plain\Context\Verbose 模式。如果一般是Context,简易有Plain,详细包括变量赋值Verbose。
%xmode Verbose
调试模型:%debug
可以用%debug 打印a和b值,然后输入quit来结束。
输入输出历史
在Ipython中,In 和Out也是变量,所以你可以通过print 来查看。
In [23]: print(In) #返回是历史输入列表
In [24]: print(Out) #返回的是字典
如果想快速查看以前输出,可以使用下划线:
print(_)
每多一个下划线,就可以前查看一个,最多可以用这个方法查看前三个输出结果:print(___)
禁止输出
如果想不输出结果,可以在语句后面加一个;
历史输入
%history 可以获得此前所有输入历史,如果想看前x条:
$history -n 1-x
Ipython和shell命令
可以使用! 加上shell命令,比如ls 。
而且可以通过赋值操纵符将shell输出保存在python列表
contents = !ls
特别注意notebook中shell命令是在临时分支的shell执行的,所以如果希望持久方式更改路径可以用%cd或者可以不用%(这种是自动魔法automagic函数,可以通过%automagic魔法函数进行翻转。)比如cat\cp\env\ls\man\mkdir\more\mv\pwd\rm\rmdir   不加%也可以。