ipython神器的使用

写在前面:在代码调试中为了快速验证函数语句开始接触了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中。 

 

发布了184 篇原创文章 · 获赞 212 · 访问量 79万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览