其他的IPython技巧

在前面提到,Sage使用了IPython作为它的前端,所有你可以使用任何IPython的命令以及特性。你可以阅读完整的IPython文档来了解这些。下面再介绍一些有趣的技巧,它们在IPython里被称作”魔术命令”。

  • 你可以使用%bg来在后台执行命令,并使用jobs来得到输出结果,就像下面这样。(注释中的not tested表示%bg语法没有通过Sage的自动测试过程,但在你自己实际使用时,它不会出现问题。这在执行耗时很久的命令时很有用。)
    1. sage: def quick(m): return 2*m
    2. sage: %bg quick(20) # not tested
    3. Starting job # 0 in a separate thread.
    4. sage: jobs.status() # not tested
    5. Completed jobs:
    6. 0 : quick(20)
    7. sage: jobs[0].result # the actual answer, not tested
    8. 40
    注意在后台运行的任务不会被Sage处理语法(参见预处理器:Sage与Python的差别)。另一种(很迷惑的)用法是
    1. sage: %bg eval(preparse('quick(20)')) # not tested
    这样更便利、也更安全。而直接使用%bg时不会调用预处理器。
  • 如果你想输入一些复杂的代码,可以使用%edit%eded来打开一个编辑器。需要在启动Sage前设置EDITOR环境变量来指向一个你喜欢的编辑器(使用export EDITOR=/usr/bin/emacsexport EDITOR=/usr/bin/vim,或是其他的配置文件,如.profile)。在Sage命令行中,执行%edit会打开指定的编辑器,之后就可以在编辑器里定义一个函数了:
    1. def some_function(n):
    2. return n**2 + 3*n + 2
    保存并退出编辑器。在之后的Sage会话中,就可以调用函数some_function了。如果你需要再次修改它,只需在Sage命令行里输入%edit some_function即可。
  • 如果你希望将当前的运算结果进行编辑并用于其他的用途,只需在结果处输入%rep,这样会将之前的结果复制到命令行中,让你可以编辑它。
    1. sage: f(x) = cos(x)
    2. sage: f(x).derivative(x)
    3. -sin(x)
    这时,在Sage命令行中输入%rep就会打开一个新的Sage命令行,在光标处就会出现-sin(x)了。

要了解更多技巧,可以输入%quickref来获得IPython的快速介绍。在编写此节时(2011年4月),Sage使用的IPython版本为0.9.1。在这里可以获得魔术命令的在线文档。更多高级的IPython魔术命令的使用可以在这里找到。