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

1

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

Теги:
read-eval-print-loop

2 ответа

4
Лучший ответ

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

Однако эта функция присутствует только в интерактивных интерпретаторах. В регулярном модуле python _ не определен (если вы не определяете его).

  • 0
    ipython также позволяет _N где N - номер истории результатов, которые вы хотите
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]
  • 0
    Ух ты, на это так быстро ответили, я даже не могу принять твой ответ! Спасибо!!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню