Я начал любить способность Scala REPL ссылаться на предыдущие вычисления с помощью resX и хотел знать, есть ли способ получить доступ к этому в Python/bpython/iPython REPL.
По умолчанию интерпретатор python манипулирует переменной именем _
чтобы иметь последнее возвращаемое значение (в том числе None
для выражений, которые возвращают его). iPython расширяет его до __
и ___
а также Out
, который является типом, содержащим все возвращенные результаты.
Однако эта функция присутствует только в интерактивных интерпретаторах. В регулярном модуле python _
не определен (если вы не определяете его).
Взгляните на этот сценарий запуска 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]
_N
гдеN
- номер истории результатов, которые вы хотите