高级IPython功能

让你的类对IPython更加友好

IPython力求为各种对象呈现一个友好的字符串表示。对于许多对象(如字典、列表和元组等),内置的pprint模块就能给出漂亮的格式。但是对于你自己定义的那些类,就必须自己生成所需的字符串输出。假设我们有下面这个简单的类:

  1. class Message:
  2. def __init__(self, msg):
  3. self.msg = msg

如果像下面这样写,你就会失望地发现这个类的默认输出形式非常不好看:

  1. In [576]: x = Message('I have a secret')
  2.  
  3. In [577]: x
  4. Out[577]: <__main__.Message instance at 0x60ebbd8>

由于IPython会获取repr方法返回的字符串(具体办法是output=repr(obj)),并将其显示到控制台上。因此,我们可以为上面那个类添加一个简单的repr方法以得到一个更有意义的输出形式:

  1. class Message:
  2. def __init__(self, msg):
  3. self.msg = msg
  4.  
  5. def __repr__(self):
  6. return 'Message: %s' % self.msg
  7.  
  8. In [579]: x = Message('I have a secret')
  9.  
  10. In [580]: x
  11. Out[580]: Message: I have a secret

个性化和配置

IPython shell在外观(如颜色、提示符、行间距等)和行为方面的大部分内容都是可以进行配置的。下面是能够通过配置做的部分事情:

·修改颜色方案。

·修改输入输出提示符。

·去掉Out提示符跟下一个In提示符之间的空行。

·执行任意Python语句。这些语句可以用于引入所有常用的东西,还可以做一些你希望每次启动IPython都发生的事情。

·启用IPython扩展,如line_profiler中的魔术命令%lprun。

·定义你自己的魔术命令或系统别名。

所有这些配置选项都定义在一个叫做ipython_config.py的文件中,可以在~/.config/ipython/目录(UNIX)和%HOME%/.ipython/目录(Windows)中找到。具体的主目录取决于你的系统。配置信息是基于特定个性化设置的。一般来说,正常启动IPython将会加载默认的个性化设置(位于profile_default目录中)。因此,在我的Linux系统中,默认IPython配置文件的完整路径是:

  1. /home/wesm/.config/ipython/profile_default/ipython_config.py

这里我就不对该文件的内容作详细介绍了。因为其注释已经说明了各个配置项的功能,各位读者完全可以自己照着做。还有一个很实用的功能是拥有多个个性化设置。假设你想要专门为某个应用程序或项目量身定做一套IPython配置。输入下面这样的命令即可新建一个个性化设置:

  1. ipython profile create secret_project

然后编辑新建的这个profile_secret_project目录中的配置文件,再用下面这种方式启动IPython:

  1. $ ipython --profile=secret_project
  2. Python 2.7.2 |EPD 7.1-2 (64-bit)| (default, Jul 3 2011, 15:17:51)
  3. Type "copyright", "credits" or "license" for more information.
  4.  
  5. IPython 0.13 -- An enhanced Interactive Python.
  6. ? -> Introduction and overview of IPython's features.
  7. %quickref -> Quick reference.
  8. help -> Python's own help system.
  9. object? -> Details about 'object', use 'object??' for extra details.
  10.  
  11. IPython profile: secret_project
  12.  
  13. In [1]:

同样,有关个性化和配置方面的详细信息,请参考IPython的在线文档。