关于 ipython
1 Tab补全
从外观上,IPython shell和标准的Python解释器只是看起来不同。
IPython shell的 进步之一是具备其它IDE和交互计算分析环境都有的tab补全功能。
在shell中输入表达式,按下Tab,会搜索已输入变量(对象、函数等等)的命名空间
2-1 ?
在变量前后使用问号?,可以显示对象的信息:
In [8]: b = [1, 2, 3]
In [9]: b?
Type: list String Form:[1, 2, 3]
Length: 3 Docstring: list() -> new empty
list list(iterable) -> new list
initialized from iterable's items
In [10]: print?
Docstring:
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=Fals e)
Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file: a file-like object (stream); defaults to the current sys. stdout.
sep: string inserted between values, default a space.
end: string appended after the last value, default a newline.
flush: whether to forcibly flush the stream.
Type: builtin_function_or_method
2-2 ?
?还有一个用途,就是像Unix或Windows命令行一样搜索IPython的命名空间。
字符与通配符结合可以匹配所有的名字。
例如,我们可以获得所有包含load的顶级 NumPy命名空间:
In [13]: np.*load*?
np.__loader__
np.load
np.loads
np.loadtxt
np.pkgload
3 ??
使用??会显示函数的源码:
In [12]: add_numbers??
Signature: add_numbers(a, b)
Source:
def add_numbers(a, b):
"""
Add two numbers together
Returns
-------
the_sum : type of arguments
"""
return a + b
File: <ipython-input-9-6a548a216e27>
Type: function
4 %run
你可以用 %run 命令运行所有的Python程序。
假设有一个文 件 ipython_script_test.py :
def f(x, y, z):
return (x + y) / z
a = 5
b = 6
c = 7.5
result = f(a, b, c)
可以如下运行:
In [14]: %run ipython_script_test.py
这段脚本运行在空的命名空间(没有import和其它定义的变量),因此结果和普通的运行方式 python script.py 相同。
文件中所有定义的变量(import、函数和全 局变量,除非抛出异常),都可以在IPython shell中随后访问:
In [15]: c
Out [15]: 7.5
In [16]: result
Out[16]: 1.4666666666666666
如果一个Python脚本需要命令行参数(在 sys.argv 中查找),可以在文件路径之后传递,就像在命令行上运行一样。
笔记:如果想让一个脚本访问IPython已经定义过的变量,可以使 用 %run -i 。
5 Ctrl-C
代码运行时按Ctrl-C,无论是%run或长时间运行命令,都会导致 KeyboardInterrupt 。
这会导致几乎所有Python程序立即停止,除非一些特殊情况。
警告:当Python代码调用了一些编译的扩展模块,按Ctrl-C不一定将执行的程序立即停止。
在这种情况下,你必须等待,直到控制返回Python解释器,或者在更糟糕的情况下强制终止Python进程。
6 从剪贴板执行
在IPython shell中也可以从剪贴板执行。
假设在其它应用中复制了代码。
%paste 可以直接运行剪贴板中的代码。
%cpaste 功能类似,但会给出一条提示。
In [18]: %cpaste
Pasting code; enter '--' alone on the line to stop or use Ctrl-D .
:
然后可以先粘贴,在最后一行键入'--'运行。
使用 %cpaste ,你可以先粘贴任意多的代码再运行。
你可能想在运行前,先看看代码。
如果粘贴了错误的代码,可以用Ctrl-C中断。
7 键盘快捷键
8 魔术命令
IPython中特殊的命令(Python中没有)被称作“魔术”命令。
这些命令可以使普通任 务更便捷,更容易控制IPython系统。
魔术命令是在指令前添加百分号%前缀。
例如,可以用 %timeit (这个命令后面会详谈)测量任何Python语句,例如矩阵乘法,的执行时间:
In [20]: a = np.random.randn(100, 100)
In [20]: %timeit np.dot(a, a)
10000 loops, best of 3: 20.9 µs per loop
魔术命令可以被看做IPython中运行的命令行。
许多魔术命令有“命令行”选项,可以通过?查看
魔术函数默认可以不用百分号,只要没有变量和函数名相同。
这个特点被称为“自动魔术”,可以用 %automagic 打开或关闭。
一些魔术函数与Python函数很像,它的结果可以赋值给一个变量.
IPython的文档可以在shell中打开,我建议你用 %quickref 或 %magic 学习下所有特殊命令。
9 集成Matplotlib
IPython在分析计算领域能够流行的原因之一是它非常好的集成了数据可视化和其它用户界面库,比如matplotlib。
%matplotlib 魔术函数配置了IPython shell和Jupyter notebook中的 matplotlib。
这点很重要,其它创建的图不会出现(notebook)或获取session的控 制,直到结束(shell)。
在IPython shell中,运行 %matplotlib 可以进行设置,可以创建多个绘图窗口, 而不会干扰控制台session:
In [26]: %matplotlib
Using matplotlib backend: Qt4Agg
在JUpyter中,命令有所不同: