Ich bin ein Ingenieur und ich benutze eine Python REPL als ein fortgeschrittener Rechner während der Arbeit. Ich verwende die "vorherige Ausgabe" -Funktion der REPL, die oft _ ist.iPython Makros Operationen
>>>45*0.344
15.48
>>>_*2
30.96
So ähnlich.
Aus irgendeinem Grund finde ich es irgendwie mühsam, den Unterstrich einzugeben. Ich habe die Haskell REPL verwendet, die "it" als die vorherige Ausgabevariable verwendet, die ich leichter zu tippen finde.
Ich habe gelernt, dass iPython können Sie Makros definieren, die einige Code ausführen. Also habe ich eine iPython-Shell geöffnet und ein% -Makro namens "it" definiert, das das "_" nachahmt.
In [1]: _
Out[1]: ''
In [2]: %macro it 1
Macro `it` created. To execute, type its name (without quotes).
=== Macro contents: ===
_
kann ich "es" etwa so:
In [1]: 4
Out[1]: 4
In [2]: it
Out[2]: 4
Allerdings, wenn ich versuche, etwas zu tun mit "es" wie it*4
, erhalte ich die Fehler unsupported operand type(s) for *: 'Macro' and 'int'
.
Ich möchte "es", um den Typ sein, der es anstelle des Typs Makro zurückgibt, damit ich es verwenden kann, genau wie ich "_" benutze.
Ich mag diese Idee, aber, a) sollte displayhook nicht displayhandler sein, aber ich habe das geändert, und b) Ich bekomme einen NameError, dass "es" nicht definiert ist. Und ich bin bei Python nicht gut genug, um genau herauszufinden, was falsch ist. – chiiidog
Irgendwie gemischt "Handler" und "Haken", sorry. Ich habe in der normalen Python-Shell getestet, und dort funktioniert diese Lösung tatsächlich. IPython verhindert zwar irgendwie das Ändern des Display-Hooks, aber durch Monkey-Anpassung können wir immer noch erreichen, was wir wollen. Siehe meine Bearbeitung. – syntonym