我在浏览子程序时有哪些选择?

时间:2017-07-06 17:31:05

标签: python

假设我想要一个程序Foo.py,它有一些任意例程Bar()Quux()Fizz()。假设从程序角度来看,通常的执行顺序应为Bar() -> Quux() -> Fizz()。但是,Fizz()应根据某些运行时操作有条件地调用函数Buzz(),并且在Buzz()期间随时调用Fizz()应将该过程返回到Quux()

我非常了解如何使用系统调用在程序集中实现并发进程,具体取决于体系结构,但我可以在Python中使用哪些选项,我不能 - 而且坦率地不愿意 - 使用批量跳转并直接移动指令指针?在搜索答案时,我发现循环和递归作为返回程序的建议。我不认为循环可以在不停止Fizz()进程等待Buzz()的条件检查的情况下工作,并且我不确定在这种情况下如何实现递归。 (我的Buzz()就像是GUI上的“后退”按钮。

3 个答案:

答案 0 :(得分:1)

你在这里不需要任何东西。通常的结构化编程工具可以正常工作。致电FizzBuzz返回,并让它返回指示是否返回Quux的指示符:

Bar()
while True:
    Quux()
    if not Fizz():
        break

(如果Buzz唯一的效果应该是将执行权恢复为Quux,则根本不会有Buzz并返回。)< / p>

答案 1 :(得分:0)

也许如下所示。 Fizz循环,直到某些条件唤起对Buzz的调用。触发调用的相同检查会中断循环。

import random

def Buzz():
    print ("Buzz")

def Fizz():
    print ("Fizz")
    while True:
        flip = random.random()
        print ("  ", flip)
        if flip <= 0.5:
            Buzz()
            break

def Quux():
    print ("Quux")
    Fizz()
    print ("Back in Quux")

def Bar():
    print ("Bar")
    Quux()

Bar()

输出:

Bar
Quux
Fizz
   0.88313135192614
   0.9782005471906149
   0.6899740417799126
   0.724911154764598
   0.6193573809551899
   0.3713918176393549
Buzz
Back in Quux

答案 2 :(得分:0)

使用协同程序(多线程)将提供所需的并发功能。来自问题的评论和user2357112的回答。