B.5 IPython高级功能

要全面地使用IPython系统需要用另一种稍微不同的方式写代码,或深入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. In [577]: x
  3. 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. def __repr__(self):
  5. return 'Message: %s' % self.msg
  6. In [579]: x = Message('I have a secret')
  7. In [580]: x
  8. Out[580]: Message: I have a secret

文件和配置

通过扩展配置系统,大多数IPython和Jupyter notebook的外观(颜色、提示符、行间距等等)和动作都是可以配置的。通过配置,你可以做到:

  • 改变颜色主题
  • 改变输入和输出提示符,或删除输出之后、输入之前的空行
  • 执行任意Python语句(例如,引入总是要使用的代码或者每次加载IPython都要运行的内容)
  • 启用IPython总是要运行的插件,比如line_profiler中的%lprun魔术函数
  • 启用Jupyter插件
  • 定义自己的魔术函数或系统别名

IPython的配置存储在特殊的ipython_config.py文件中,它通常是在用户home目录的.ipython/文件夹中。配置是通过一个特殊文件。当你启动IPython,就会默认加载这个存储在profile_default文件夹中的默认文件。因此,在我的Linux系统,完整的IPython配置文件路径是:

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

要启动这个文件,运行下面的命令:

  1. ipython profile create

这个文件中的内容留给读者自己探索。这个文件有注释,解释了每个配置选项的作用。另一点,可以有多个配置文件。假设你想要另一个IPython配置文件,专门是为另一个应用或项目的。创建一个新的配置文件很简单,如下所示:

  1. ipython profile create secret_project

做完之后,在新创建的profile_secret_project目录便捷配置文件,然后如下启动IPython:

  1. $ ipython --profile=secret_project
  2. Python 3.5.1 | packaged by conda-forge | (default, May 20 2016, 05:22:56)
  3. Type "copyright", "credits" or "license" for more information.
  4. IPython 5.1.0 -- An enhanced Interactive Python.
  5. ? -> Introduction and overview of IPython's features.
  6. %quickref -> Quick reference.
  7. help -> Python's own help system.
  8. object? -> Details about 'object', use 'object??' for extra details.
  9. IPython profile: secret_project

和之前一样,IPython的文档是一个极好的学习配置文件的资源。

配置Jupyter有些不同,因为你可以使用除了Python的其它语言。要创建一个类似的Jupyter配置文件,运行:

  1. jupyter notebook --generate-config

这样会在home目录的.jupyter/jupyter_notebook_config.py创建配置文件。编辑完之后,可以将它重命名:

  1. $ mv ~/.jupyter/jupyter_notebook_config.py ~/.jupyter/my_custom_config.py

打开Jupyter之后,你可以添加—config参数:

  1. jupyter notebook --config=~/.jupyter/my_custom_config.py