Tab自动完成

另外一个极为有用的有关IPython数据输入(data-entry)的特征是Tab自动完成功能,该功能在默认 状态下是开启的。标准Python shell如果编译时增加了readline支 持特性,将具有tab自动完成功能,但需要做如下处理:

 
    
  1. >>> import rlcompleter, readline  
  2. >>> readline.parse_and_bind('tab: complete') 

经过上述设置,我们可以使用如下功能:

 
    
  1. >>> import os  
  2. >>> os.lis<TAB> 
  3. >>> os.listdir  
  4. >>> os.li<TAB><TAB> 
  5. os.linesep os.link os.listdir 

在加载了rlcompleter和readline,并设置了readline的 Tab自动完成选项后,可以载入os,输入os.lis,按Tab键一次,让自动完成功能将其匹配成os.listdir。也可以输入los.li,然后 按Tab键两次,将会出现一个所有可能匹配的列表。

在IPython中,可以实现相同的功能而无须进行任何额外的配置。对于Python, 该项功能是可选的,而对于IPython,该功能则为默认开启的。下面是在IPython中 运行与之前相同的示例:

 
    
  1. In [1]: import os  
  2. In [2]: os.lis<TAB> 
  3. In [2]: os.listdir  
  4. In [2]: os.li<TAB> 
  5. os.linesep os.link os.listdir 

注意,在本示例的最后一行,只需按Tab键一次即可。

这个os.TAB示例仅仅演示了IPython的属性查找和自动完成功能,而另一个 更不错的自动完成功能,则体现在模块导入方面。打开一个新的IPython shell,这样可以看到IPython将 如何帮助我们找到需要载入的模块:

 
    
  1. In [1]: import o  
  2. opcode operator optparse os os2emxpath ossaudiodev  
  3. In [1]: import xm  
  4. xml xmllib xmlrpclib 

注意:所有通过import自动完成功能所列出的项都是模块,不需要为此感到意外,这就是IPython的 特点。

IPython提供了两类自动完成功能:完成(complete)与菜单完成(menu- complete)。两者的差别在于“完成”尽可能扩展当前的主题词,并提供一个可能的替换列表,而“菜单完成”会扩展主题词,直接匹配可以替换列表中的 一个,并且如果连续按Tab键时,每一次都会切换到下一个可能的替换。IPython的默认自动完成是“完成”。也可以通 过简单的设置,轻松修改IPython的原有配置。

摘自《Python在Unix和Linux系统管理中的应用》