目录
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
不加%也可以。