首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >收回子函数并继续使用Python执行主程序。

收回子函数并继续使用Python执行主程序。
EN

Stack Overflow用户
提问于 2022-03-30 19:47:55
回答 2查看 119关注 0票数 0

考虑以下结构

代码语言:javascript
复制
    main_func()
{
        sub_func1()
        sub_func2()
        sub_func3()
        .
        .
        .
        sub_funcN()
        exit()
}

我希望实现一个‘回到以前的功能’功能,同时保持完整的执行顺序。

例如:在执行主函数时,用户在sub_func3()中选择“回到以前的函数”以转到sub_func2(),然后继续主程序的相同序列,即sub_func2() -> sub_func3 () -> .如何实现-> sub_funcN() -> exit()?

期待你的回应

EN

回答 2

Stack Overflow用户

发布于 2022-03-30 19:54:00

根据实际用例的不同,可能有更好的方法来处理这个问题,但有一种方法是让每个sub_func返回一个标志,指示是前进到下一个函数,还是倒带到前一个函数,然后使用该标志在列表中移动索引:

代码语言:javascript
复制
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来推进状态机)。

票数 0
EN

Stack Overflow用户

发布于 2022-03-30 20:00:01

您可以创建一个类(让我们称之为OperationClass)。函数创建一个OperationClass实例。

在OperationClass上,您还定义了操作流back()和next()方法()。

因此,您可以让main()函数调用OperatorClass.next()或OperatorClass.back(),并且这个方法知道应该执行的流程和函数(方法)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71683316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档