|
|
51CTO旗下网站
|
|
移动端

2.4.2 使用IPython交互式编程(2)

《Python Linux系统管理与自动化运维》第2章Python生态工具,在本章中,我们将依次介绍Python生态的各种工具,包括:Python内置的小工具(2.1节);包管理工具pip(2.2节);Linux和Windows下的Python编辑器(2.3节);Python交互式编程工具(2.4节);Python调试器(2.5节);Python代码规范检查工具(2.6节)。本节为大家介绍使用IPython交互式编程。

作者:赖明星来源:机械工业出版社|2017-09-28 16:17

【大咖·来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》

2.4.2 使用IPython交互式编程(2)

2.更好地获取帮助信息

Python工程师不但可以通过交互式编程快速验证代码执行结果,还可以通过交互式编程的方式学习Python编程。之所以说Python工程师可以通过交互式编程学习编程,是因为使用IPython能够方便地获取到相应的帮助信息。如命名空间下的每个对象以及其定义和使用说明。虽然标准的Python Shell也可以通过help函数获取到对象的帮助信息,但是,IPython提供了更加灵活的方式获取命名空间下的对象列表,以及更加全面的帮助信息。

我们知道,在标准库的os模块下的path子模块中有很多操作文件、目录和路径的函数,也有很多以"is"开始的判断类函数。这些判断类函数的作用非常明确,用以判断给定的对象是否为一个文件或一个目录。我们可以使用通配符的方式获取该模块下的所有判断类函数,如下所示:

  1. In [11]: import os  
  2.  
  3. In [12]: ?os.path.is*  
  4. os.path.isabs  
  5. os.path.isdir  
  6. os.path.isfile  
  7. os.path.islink  
  8. os.path.ismount 

获取当前命名空间下的所有对象,除了使用通配符的方式以外,也可以使用前面介绍的tab补全方式。tab补全的方式更加实用一些,就如同IPython提供的获取帮助信息的方式比标准的Python Shell获取帮助信息更实用一样。在IPython中,可以通过标准的help函数获取对象的帮助信息,也可以使用“?”和“??”获取对象的帮助信息,如下所示:

  1. In [1]: import json  
  2.  
  3. In [2]: import os  
  4.  
  5. In [3]: os.path.isfile?  
  6. Signature: os.path.isfile(path)  
  7. Docstring: Test whether a path is a regular file  
  8. File:      ~/.pyenv/versions/3.6.0/lib/python3.6/genericpath.py  
  9. Type:      function  
  10.  
  11. In [4]: json.dump?  
  12.  
  13. Signature: json.dump(obj, fp, *, skipkeys=Falseensure_ascii=Truecheck_circular=Trueallow_nan=Truecls=Noneindent=Noneseparators=Nonedefault=Nonesort_keys=False, **kw)  
  14. Docstring:  
  15. Serialize ''obj'' as a JSON formatted stream to ''fp'' (a  
  16. ''.write()''-supporting file-like object).  
  17.  
  18. If ''skipkeys'' is true then ''dict'' keys that are not basic types  
  19. (''str'', ''int'', ''float'', ''bool'', ''None'') will be skipped  
  20. instead of raising a ''TypeError''. 

当我们输入对象名称,再输入一个问号以后按回车键,就会显示相应的帮助信息。如果帮助信息比较长,则会以分页的方式显示帮助信息。如果因为帮助信息太多而进入了分页页面,可以通过“q”键退出,退出以后可以继续进行编程。

例如,json这个标准库下有一个dump函数和一个dumps函数,Python初学者总是容易混淆。这个时候,如果能够充分利用IPython,就可以方便地获取到帮助信息,使用时不容易犯错。下面就是一个典型的Python工程师使用json模块的方式,先构造了一个字典,希望将字典转换成json字符串。因为不知道应该使用json.dump函数还是json.dumps函数,所以,在交互式编程中通过“json.dump?”语句获取dump函数的帮助信息。获取完json.dump函数的帮助信息以后,按“q”键退出,退出以后继续进行编程。如下所示:

  1. In [1]: import json  
  2.  
  3. In [2]: d = dict(a=1b=2c=3)  
  4.  
  5. In [3]: json.dump?  
  6.  
  7. In [4]: json.dumps(d)  
  8. Out[4]: '{"a": 1, "b": 2, "c": 3}' 

在IPython中,除了使用一个问号获取帮助信息以外,也可以使用两个问号获取帮助信息。两个问号获取到的帮助信息更加全面,甚至会包含函数的实现源码。

除了使用问号的方式获取对象的帮助信息以外,IPython还提供了另外一种方式获取对象的信息,可以分别获取对象的定义、文档和文件等。如下所示:

  1. In [1]: import json  
  2.  
  3. In [2]: %pdef json  
  4. Object is not callable.  
  5.  
  6. In [3]: %pdef json.dump  
  7. json.dump(obj, fp, *, skipkeys=Falseensure_ascii=Truecheck_circular=Trueallow_nan=Truecls=Noneindent=Noneseparators=Nonedefault=Nonesort_keys=False, **kw)  
  8.  
  9. In [4]: %pfile json.dump  
  10.  
  11. In [5]: %pdoc json.dump  
  12.  
  13. In [6]: %pinfo json 

3. magic函数

IPython提供了很多功能强大的函数,如前面已经提到的%pfile、%pdoc、%pinfo等。为了区分IPython提供的函数和用户的输入,所有IPython提供的函数都以“%”开头。以“%”开头的这类功能强大的函数,在IPython中称为magic函数。magic函数主要是为IPython提供增强的功能、与操作系统交互、操纵用户的输入和输出以及对IPython进行配置。

IPython会将任何***个字母为“%”的行,视为对magic函数的特殊调用。因此,所有的magic函数都是以“%”开头。在IPython中,有两种不同的方法可以获取magic函数列表,分别是通过“%<tab>”获取所有的magic函数和通过“%lsmagic”获取所有的magic函数。

下面是一个用lsmagic函数获取magic函数列表的例子:

  1. In [1]: %lsmagic  
  2. Out[1]:  
  3. Available line magics:  
  4. %alias  %alias_magic  %autocall  %autoindent  %automagic  %bookmark  %cat  %cd  %clear  %colors  %config  %cp  %cpaste  %debug  %dhist  %dirs  %doctest_mode  %ed  %edit  %env  %gui  %hist  %history  %killbgscripts  %ldir  %less  %lf  %lk  %ll  %load  %load_ext  %loadpy  %logoff  %logon  %logstart  %logstate  %logstop  %ls  %lsmagic  %lx  %macro  %magic  %man  %matplotlib  %mkdir  %more  %mv  %notebook  %page  %paste  %pastebin  %pdb  %pdef  %pdoc  %pfile  %pinfo  %pinfo2  %popd  %pprint  %precision  %profile  %prun  %psearch  %psource  %pushd  %pwd  %pycat  %pylab  %quickref  %recall  %rehashx  %reload_ext  %rep  %rerun  %reset  %reset_selective  %rm  %rmdir  %run  %save  %sc  %set_env  %store  %sx  %system  %tb  %time  %timeit  %unalias  %unload_ext  %who  %who_ls  %whos  %xdel  %xmode  
  5.  
  6. Available cell magics:  
  7. %%!  %%HTML  %%SVG  %%bash  %%capture  %%debug  %%file  %%html  %%javascript  %%js  %%latex  %%perl  %%prun  %%pypy  %%python  %%python2  %%python3  %%ruby  %%script  %%sh  %%svg  %%sx  %%system  %%time  %%timeit  %%writefile  
  8.  
  9. Automagic is ON, % prefix IS NOT needed for line magics. 

可以看到,IPython提供了很多magic函数。并且,随着IPython的功能越来越多,magic函数还会不断增加。那么,有没有一种好的方法能够快速了解magic函数的用法呢?前面介绍的通过问号获取对象帮助信息的方法对magic函数也适用。因此,只要输入一个magic函数,后面再输入一个问号,回车以后就能够看到这个magic函数的帮助信息。如下所示:

  1. In [2]: %save?  
  2. Docstring:  
  3. Save a set of lines or a macro to a given filename.  
  4.  
  5. Usage:  
  6.     %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...  
  7.  
  8. Options:  
  9.  
  10.     -r: use 'raw' input.  By default, the 'processed' history is used,  
  11.     so that magics are loaded in their transformed version to valid  
  12.     Python.  If this option is given, the raw input as typed as the  
  13.     command line is used instead.  
  14.  
  15.     -f: force overwrite.  If file exists, %save will prompt for overwrite  
  16.     unless -f is given.  
  17.  
  18.     -a: append to the file instead of overwriting it.  
  19.  
  20. This function uses the same syntax as %history for input ranges,  
  21. then saves the lines to the filename you specify. 

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

16招轻松掌握PPT技巧

16招轻松掌握PPT技巧

GET职场加薪技能
共16章 | 晒书包

289人订阅学习

20个局域网建设改造案例

20个局域网建设改造案例

网络搭建技巧
共20章 | 捷哥CCIE

645人订阅学习

WOT2019全球人工智能技术峰会

WOT2019全球人工智能技术峰会

通用技术、应用领域、企业赋能三大章节,13大技术专场,60+国内外一线人工智能精英大咖站台,分享人工智能的平台工具、算法模型、语音视觉等技术主题,助力人工智能落地。
共50章 | WOT峰会

0人订阅学习

读 书 +更多

八万里路云和月——一个国家扶贫开发工作重点县的

通榆,这个距离各个交通枢纽都十万八千里的偏僻小县城,搭载着电子商务的快车,踏上了云高速,开辟了如火如荼的电商致富的新战场,实现了一...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO播客