Python REPL中是否有与Scala的REPL类似的功能来引用先前的计算?

时间:2012-01-10 17:39:27

标签: python scala read-eval-print-loop

我开始喜欢Scala REPL能够使用resX引用以前的计算,并想知道是否有办法在Python / bpython / iPython REPL中访问它。

2 个答案:

答案 0 :(得分:4)

默认的python解释器通过名称_操作变量以获得最后返回的值(包括返回它的表达式的None)。 iPython将其扩展为_____以及Out,这是一个包含所有返回结果的字典。

此功能仅在交互式口译员中 。在常规python模块中,_未定义(除非您定义它)​​。

答案 1 :(得分:3)

看一下这个python启动脚本(Python会查找一个导出PYTHONSTARTUP变量,该变量应该包含脚本的路径,例如$HOME/.pythonrc.py):

作为备份:

h = [None]  # history

class Prompt:
    """A prompt a history mechanism.
    From http://www.norvig.com/python-iaq.html
    """
    def __init__(self, prompt='h[%d] >>> '):
        self.prompt = prompt

    def __str__(self):
        try:
            if _ not in h: h.append(_)
        except NameError:
            pass
        return self.prompt % len(h)

    def __radd__(self, other):
        return str(other) + str(self)

sys.ps1 = Prompt()
sys.ps2 = '     ... '

用法:

h[1] >>> lambda x: x * 2
<function <lambda> at 0xb7dab41c>
h[2] >>> [1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
h[3] >>> map(h[1], h[2])
[2, 4, 6, 8, 10]