写在前面:在代码调试中为了快速验证函数语句开始接触了ipython工具,仔细查看下真的是非常强大的python神器。下面通过自己测试,记录下该工具的使用。过程参照了知乎:https://www.zhihu.com/question/51467397
1、获得对象信息。命令形式: 对象?或对象??(一个问号显示对象的属性信息,如类型、Docstring和代码文件的位置,二个问号可以直接显示源代码)
import numpy as np
np?
输出如下:
Type: module
String form: <module 'numpy' from '/opt/anaconda3/lib/python3.6/site-packages/numpy/__init__.py'>
File: /opt/anaconda3/lib/python3.6/site-packages/numpy/__init__.py
Docstring:太多略了
np??
输出如下:
Type: module
String form: <module 'numpy' from '/opt/anaconda3/lib/python3.6/site-packages/numpy/__init__.py'>
File: /opt/anaconda3/lib/python3.6/site-packages/numpy/__init__.py
Source:下面是__init__.py源代码,略了。
2、调用Linux系统Shell命令 。 命令形式: !命令
!pwd
输出:
/home/spark/grocery/exerise
!cp python-u.py 1.py
结果:实现了复制功能
!cd .. 问题引出ipython调用系统shell的原理
!命令 调用系统shell的过程 并不是在当前shell(the shell)中运行系统命令,而是新建一个shell(a shell:这个shell并不是启动当前ipython的shell)运行命令,并且命令执行完后该shell会迅速关闭。 基于以上原理,因此在执行!cd .. 命令后当前shell的路径并没有改变。
延伸:当使用cd ..或%cd ..命令时,在ipython 会话(session)下是可以改变路径的,但当退出ipython会话后,这种改变并不能对启动ipython时的shell路径有所影响。综上,You can't change the parent shell's working directory from IPython.
3. Tab自动补全。命令形式:<Tab键>
IPython可以自动检查对象的属性,通过object_name.<TAB>列出全部的子属性。
4. 历史记录。命令形式: 上下键或ctrl + r
5.内置magic函数 调用形式:%函数名 (使用%lsmagic获得全部可用的Magic函数)
下面列举常用的:
5.1 :%run :运行脚本。调用方式:%run **.py
通过使用magic函数run,可以在ipython环境下运行脚本代码,且代码运行结束后,代码种的变量值可以在ipython环境种保存 下来,这非常方便查看脚本种的各种变量。
5.2: %debug:激活交互的调试器。调用方式:%debug (在生成错误时用)
In [16]: a = 0
In [17]: b =1
In [18]: b/a
---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
<ipython-input-18-eea5515ea1c0> in <module>()
----> 1 b/a
ZeroDivisionError: division by zero
In [19]: %debug
> <ipython-input-18-eea5515ea1c0>(1)<module>()
----> 1 b/a
ipdb> p a
0
ipdb> p b
1
可以发现使用debug magic函数后可以直接使用ipython的调试器ipdb进行调试了。
5.3 %history和%hist(前者的别名):查看历史记录
该magic函数的功能与Linux shell中的history命令类似,此外,还可以使用%dhist查看工作目录历史。
5.4 %load: 将外部代码加载到当前ipython环境中,外部代码可以是脚本文件(或一部分),URL等。 调用方法:%load **.py
具体其他可选参数等的使用,可通过%load? 来查看。
5.5 %rehashx: 把$PATH(这里应该指的是系统环境变量)中的可执行命令都更新进别名表中,这样就可以在IPython中命令前不加感叹号就可以直接使用Linux shell命令了。
In [1]: echo 1
File "<ipython-input-1-334d5669e1fb>", line 1
echo 1
^
SyntaxError: invalid syntax
In [2]: %rehashx
In [3]: echo 1
1
5.6 %timeit:测试程序或命令的执行时间。使用方法:%timeit 程序或命令。(默认迭代执行100次,通过多次执行以产生一个非常精确的平均执行时间。)
%timeit !ls
输出结果:
ls出的文件略
100 loops, best of 3: 9.93 ms per loop
5.7 %logstart ;%logstop:记录ipython会话中的交互过程(命令等等,不只是命令奥),并保存到文件。使用方法:%logstart [-o] [-r] [-t] [log_name [mode]]
此外,在%logstart和%logstop之间还可以设置%logon和%logoff来开始和暂停记录,通过%logstate来查看记录状态。再此外,%logstart 启动后会连同该命令之前的历史记录一起保存,因此要想有个干净起点的话,最好调用 %clear 清理现场。
6、%store : 保留python变量的值,即便退出ipython,再次进入ipython环境后依然可以加载。调用方式:%store 变量
import numpy as np
a = np.array([[1,2,3,4,5],[1,2,3,4,5]])
In [24]: %store a
Stored 'a' (ndarray)
In [25]: exit
spark@node4:/home/spark/grocery/exerise$ ipython
In [1]: a
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
NameError: name 'a' is not defined
In [2]: %store -r
In [3]: a
Out[3]:
array([[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5]])
此外,可以使用%store foo >a.txt 将值foo存储到新的文件a.txt中。