Есть ли в Python REPL функция, аналогичная Scala REPL для ссылки на предыдущие вычисления? - PullRequest
1 голос
/ 10 января 2012

Мне начала нравиться способность Scala REPL ссылаться на предыдущие вычисления с помощью resX, и я хотел узнать, есть ли способ получить доступ к этому в Python / bpython / iPython REPL.

Ответы [ 2 ]

4 голосов
/ 10 января 2012

Интерпретатор Python по умолчанию манипулирует переменной с именем _, чтобы получить последнее возвращенное значение (включая None для выражений, которые его возвращают). iPython расширяет это до __ и ___, а также Out, что является диктатом, содержащим все возвращенные результаты.

Эта функция присутствует только в интерактивных переводчиках. В обычном модуле Python _ не определено (если вы его не определите).

3 голосов
/ 10 января 2012

Посмотрите на этот скрипт запуска 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]
...