2016-05-08 66 views
-1

我想知道如果在Python中的基于控制台的程序可以倒退。更具体地说,在程序运行时,如果有可能撤销用户输入的操作(例如,用户意外地输入了某个不正确的内容,并且他想要在不重新启动程序的情况下返回,比如点击Ctrl + Z撤消)是可能?如果是的话如何? :)Python向后运行程序

+0

一般?但是,如果你为它编码?如果查看Design Patterns书籍,其中一种模式(命令?)讨论了其中的一个特色,即提供撤消功能。您还必须处理通过键盘接收用户命令 - 控制台程序本身不是事件驱动的。 –

+0

很明显,它可以完成,因为你给程序,可以做_exactly this_作为一个例子。至于“如何”,那很简单......编写一个这样做的程序。 (我怀疑你想要问一些比这更精确的问题,但正如你从各种各样的答案中看到的那样 - 包括完全相互矛盾的答案---没有太多共识,那么更准确的问题是什么是......) –

回答

2

编号

不幸的是Python不提供此功能。

Python是一种命令式语言,具有可变状态,并且实现“撤消”功能需要对语言内部进行相当大的重构(在用户输入错误的输入之后,很多事情可能会发生在内存中......并且他们都必须进入“交易”才能回到以前的状态)。

还要考虑到,当处理错误的输入时,程序可能会改变磁盘上的文件或发送网络消息到另一台计算机......您如何“撤消”这些操作?

+1

实际上,Python可以创建“事务性”对象,这些对象可以代理20或30行代码中没有任何附带I/O操作的任何对象 - 这与任何事情的“非常重构”都很相似。 – jsbueno

+1

@jsbueno:是的,你可以(而且我确实是)。但是,只有在操纵特定种类的自定义对象时,这个问题才有效。与常规变量和标准对象一起工作的一般Python代码对于进行事务性处理(即使不包括I/O或其他不可逆操作)也不是微不足道的。 – 6502

1

我怀疑任何语言是否支持在程序中任意回滚。当你看到一个具有撤销功能的程序时,这是因为它是根据程序管理的特定状态手动实现的。