?功能
- 在一个变量名的前后使用问号(?)可以显示一些关于该对象的概要信息:
b=[1,2,3]
b?
- 假设已经写好了如下函数(你可以在Ipython或jup中复现):
def add_numbers(a,b):
"""
Add two numbers together
Returns
-------
the_sum : type of arguments
"""
return a + b
- 然后使用?来显示文档字符串
In [11]: add_numbers?
Signature: add_numbers(a, b)
Docstring:
Add two numbers together
Returns
-------
the_sum : type of arguments
File: <ipython-input-9-6a548a216e27>
Type: function
- 使用双问号??可以显示函数的源代码:
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: d:\pythonproject\利用python进行数据分析\<ipython-input-1-a35364d424b1>
Type: function
- ?有一个终极用途,可以像Unix或Windows命令行一行搜索IPython命名空间。把一些字符和通配符(星好*)结合在一起,会显示所有匹配通配符表达式的命名。例如,我们可以得到NumPy顶层函数中包含load的函数名列表:
In [13]: np.*load*?
np.__loader__
np.load
np.loads
np.loadtxt
np.pkgload
2.2.5 %run命令
- 可以在IPython会话中使用%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)
- 可以将文件名作为参数传给%run命令:
%run ipython_script_test.py #该文件要放在同一文件夹下,比如我是直接放在利用python进行数据分析下面的。在利用python进行数据分析下新建一个文件夹,再放入该.py文件是无法调用的
- 脚本是在空白命名空间(没有导入模块或其他定义变量)中运行的,因此这个行为与在命名行中使用python script.py来运行程序是相同的。文件中定义的所有变量(导入的、函数中的、全局定义的)在运行后,可以在IPython命令行中使用(除非出现某种异常):
- 如果一个Python脚本需要命令行提供参数(通过sys.argv获得),那么则需要在命令行的文件路径后面加上参数进行传递:
- 如果你想让待运行的脚本使用交互式IPython命名空间中已有的变量,请使用%run -i替代普通的%run命令。
- 在Jupyter notebook中,如果你想将脚本导入一个代码单元,可以使用%load魔法函数:
>>> %load 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)
中断运行中的代码
- 在任意代码运行时按下Ctrl-C,无论脚本是通过%run或是其他长命令运行的,都将引起KeyboardInterrupt。除了某些特殊情况,这将导致所有的Python程序立刻停止运行。
- 当一段Python代码被其他已经编译的扩展模块调用时,按下Ctrl-C并不会让程序立即停止运行。在这些情况下,你需要等到控制流重新返回Python解释器,在更糟糕的情况下可能要强制结束Python进程。
执行剪贴板中的程序
- 如果你正在使用Jupyter notebook,你可以将代码复制粘贴到代码单元,然后运行。在IPython中可以直接运行剪贴板中的程序。假设你在其他的应用中写了如下代码:
x = 5
y = 7
if x > 5:
x += 1
y = 8
- 使用以上代码,最简单的方法就是%paste和%cpaste魔术函数。%paste会获得剪贴板中的所有文本,并在命令行中作为一个代码块去执行:
不知道为何会报错,我已经在其他地方复制了上面的代码,用该魔法函数时还是报错了
终端快捷键
- Ipython有很多用于浏览器提示、查看历史命名的快捷键(Emacs文本编辑器和Unix bash命令行的使用者会很熟悉)。
关于魔法命令
- IPython的特殊命令(没有内建到Python自身中去)被称为“魔术”命令。这些命令被设计用于简化常见任务,确保用户更容易控制IPython系统的行为。魔术命令的前缀符号是百分号%。例如,你可以使用%timeit来检查一段Python语句的执行时间,比如一个矩阵操作(后续将会详细讨论%timeit):
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系统内部的命令行程序。大多数魔术命令都可以使用?查看额外的“命令行”选项:
In [21]: %debug?
- 魔术函数也可以不加百分号%就使用,只要没有变量被定义为与魔术函数相同的名字即可。这种特性被称为自动魔术,通过%automagic进行启用/禁用关。
- 一些魔法函数也像Python函数一样,其输出可以赋给一个变量。
In [22]: %pwd
Out[22]: '/home/wesm/code/pydata-book
In [23]: foo = %pwd
In [24]: foo
Out[24]: '/home/wesm/code/pydata-book'
上面的代码未能运行成功
- 由于IPython的文档可以在系统内访问,建议使用%quickref或者%magic探索所有的特殊命令。
matplotlib集成
- IPython能在分析计算领域流行的原因之一,就是它和数据可视化、用户界面库(如matplotlib)的良好集成。即使你从未使用过matplotlib也不必担心,本书的后续章节会详细谈论该部分内容。%matplotlib魔术函数可以设置matplotlib与IPython命令行Jupyter notebook的集成。这个命令很重要,否则你创建的图可能不会出现(notebook),或者直到结束也无法控制会话(命令行)。
- 在IPython命令行中,运行%matplotlib命令可以生成多个绘图窗口,而无须干扰控制台的会话。
In [26]: %matplotlib
Using matplotlib backend: Qt4Agg
In [26]: %matplotlib inline