35 lines
573 B
Python
35 lines
573 B
Python
|
|
import sys
|
||
|
|
|
||
|
|
HIST = {}
|
||
|
|
|
||
|
|
def trace(frame, event, arg):
|
||
|
|
for name,val in frame.f_locals.items():
|
||
|
|
if name not in HIST:
|
||
|
|
HIST[name] = []
|
||
|
|
else:
|
||
|
|
if HIST[name][-1] is val:
|
||
|
|
continue
|
||
|
|
HIST[name].append(val)
|
||
|
|
return trace
|
||
|
|
|
||
|
|
def undo(name):
|
||
|
|
HIST[name].pop(-1)
|
||
|
|
return HIST[name][-1]
|
||
|
|
|
||
|
|
def main():
|
||
|
|
a = 10
|
||
|
|
a = 20
|
||
|
|
|
||
|
|
for i in range(5):
|
||
|
|
c = i
|
||
|
|
|
||
|
|
print "c:", c, "-> undo x3 ->",
|
||
|
|
c = undo('c')
|
||
|
|
c = undo('c')
|
||
|
|
c = undo('c')
|
||
|
|
print c
|
||
|
|
print 'HIST:', HIST
|
||
|
|
|
||
|
|
sys.settrace(trace)
|
||
|
|
main()
|