IPython基础

你可以通过命令行启动IPython,就像启动标准Python解释器那样,只是把命令改为ipython罢了:

  1. $ ipython
  2. Python 2.7.2 (default, May 27 2012, 21:26:12)
  3. Type "copyright", "credits" or "license" for more information.
  4.  
  5. IPython 0.12 -- 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. In [1]: a = 5
  12.  
  13. In [2]: a
  14. Out[2]: 5

你可以在这里执行任何Python语句,只需将其输入然后按下回车键就行了。如果只是在IPython中输入了一个变量,那么它将会显示出该对象的一个字符串表示:译注1

  1. In[541]:import numpy as np
  2.  
  3. In[542]: data = {i : randn() for i in range(7)}?
  4.  
  5. In [543]: data
  6. Out[543]:
  7. {0: 0.5580886709219381,
  8. 1: 0.25701015249982423,
  9. 2: 0.8876099192477288,
  10. 3: 1.0210657329557034,
  11. 4: -0.21799201419817044,
  12. 5: 1.1388001234975833,
  13. 6: -0.5209890532927175}

许多Python对象都被格式化为可读性更好(或者说排版更好)的形式,这跟print的普通输出形式有着显著区别。如果在标准Python解释器中打印上面那个字典对象,其可读性就没那么好了:

  1. >>> from numpy.random import randn
  2. >>> data = {i : randn() for i in range(7)}
  3. >>> print data
  4. {0: -1.5948255432744511, 1: 0.10569006472787983, 2: 1.972367135977295,
  5. 3: 0.15455217573074576, 4: -0.24058577449429575, 5: -1.2904897053651216,
  6. 6: 0.3308507317325902}

IPython还可以方便地执行任意代码块(通过少量优雅的复制粘贴操作)和整个Python脚本。稍后就会对该功能进行介绍。

Tab键自动完成

从表面上看,IPython就像是一个化了淡妆的交互式Python解释器。数学软件(Mathematica)用户可能会对标号式的输入输出提示符眼熟。Tab键自动完成功能是对标准Python shell的主要改进之一,大部分交互式数据分析环境都有这个功能。在shell中输入表达式时,只要按下Tab键,当前命名空间中任何与已输入的字符串相匹配的变量(对象、函数等)就会被找出来:

  1. In [1]: an_apple = 27
  2.  
  3. In [2]: an_example = 42
  4.  
  5. In [3]:an<Tab>译注2
  6. an_apple and an_example any译注3

在这个例子中可以看到,IPython将我定义的两个变量都显示出来了,此外还显示了Python关键字and和内置函数any。当然,你也可以在任何对象后面输入一个句点以便自动完成方法和属性的输入:

  1. In [3]: b = [1, 2, 3]
  2.  
  3. In [4]: b.<Tab>
  4. b.append b.extend b.insert b.remove b.sort
  5. b.count b.index b.pop b.reverse

还可以应用在模块上:

  1. In [1]: import datetime
  2.  
  3. In [2]: datetime.<Tab>
  4. datetime.MAXYEAR datetime.datetime datetime.timedelta
  5. datetime.MINYEAR datetime.datetime_CAPI datetime.tzinfo
  6. datetime.date datetime.time

注意: IPython默认会隐藏那些以下划线开头的方法和属性,比如魔术方法(magic method)以及内部的“私有”方法和属性,其目的是避免在屏幕上显示一堆乱七八糟的东西(也为了避免把Python新人搞晕!)。其实这些也是可以通过Tab键自动完成的,只是你得先输入一个下划线才行。如果你就是喜欢能总是看到这些方法,直接修改IPython配置文件中的相关设置就可以了。

Tab键自动完成功能不只可以用于搜索命名空间和自动完成对象或模块属性。当你输入任何看上去像是文件路径的东西时(即使是在一个Python字符串中),按下Tab键即可找出电脑文件系统中与之匹配的东西:

  1. In [3]: book_scripts/<Tab>译注4
  2. book_scripts/cprof_example.py book_scripts/ipython_script_test.py
  3. book_scripts/ipython_bug.py book_scripts/prof_mod.py
  4.  
  5. In [3]: path = 'book_scripts/<Tab>
  6. book_scripts/cprof_example.py book_scripts/ipython_script_test.py
  7. book_scripts/ipython_bug.py book_scripts/prof_mod.py

如果再结合%run命令(参见后面内容),该功能将显著减少你敲键盘的次数。

Tab键自动完成功能还可用于函数关键字参数(包括等号(=)!)。

译注1:从输入输出提示符来看,作者在这两段之间做了不少事情,所以如果出现randn找不到的情况,请先执行from numpy.random import randn。

译注2:后面的<Tab>只是一个按键说明而已,不用输入。顺便说明一下,按完Tab键之后,已输入的内容会在下一行重复出现,行号也是一样的,直接接着往下输入就行了。

译注3:根据软件版本、配置以及当前上下文的不同,这里得到的结果可能会比书上的多。

译注4:注意,要使用正斜杠(/),不然认不出来。此外,文件夹或文件名中间不能有空格,不然也无法正常继续操作。