|
|
|
|
移动端

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

年前最后一场技术盛宴 | 1月27日与京东、日志易技术大咖畅聊智能化运维发展趋势!


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
分享:
大家都在看
猜你喜欢

读 书 +更多

软件架构设计

本书紧紧围绕“软件架构设计”这一主题,立足实践解析了软件架构的概念,阐述了切实可行的软件架构设计方法,提供了可操作性极强的完整的架...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊