考虑以下结构
main_func()
{
sub_func1()
sub_func2()
sub_func3()
.
.
.
sub_funcN()
exit()
}我希望实现一个‘回到以前的功能’功能,同时保持完整的执行顺序。
例如:在执行主函数时,用户在sub_func3()中选择“回到以前的函数”以转到sub_func2(),然后继续主程序的相同序列,即sub_func2() -> sub_func3 () -> .如何实现-> sub_funcN() -> exit()?
期待你的回应
发布于 2022-03-30 19:54:00
根据实际用例的不同,可能有更好的方法来处理这个问题,但有一种方法是让每个sub_func返回一个标志,指示是前进到下一个函数,还是倒带到前一个函数,然后使用该标志在列表中移动索引:
def sub_func1() -> int:
if input("Go back? ") == "y":
return -1
# do other stuff
return 1
sub_funcs = [
sub_func0,
sub_func1,
sub_func2,
sub_func3,
# ...
sub_funcN
]
i = 0
while i < len(sub_funcs):
i += sub_funcs[i]()这方面的一个变化可能是让sub_funcs引发一个GoBack异常,该异常被调用方中的try/except捕获以减少索引,默认情况是增加索引(这样,每个函数都不需要显式return 1来推进状态机)。
发布于 2022-03-30 20:00:01
您可以创建一个类(让我们称之为OperationClass)。函数创建一个OperationClass实例。
在OperationClass上,您还定义了操作流back()和next()方法()。
因此,您可以让main()函数调用OperatorClass.next()或OperatorClass.back(),并且这个方法知道应该执行的流程和函数(方法)。
https://stackoverflow.com/questions/71683316
复制相似问题