函数对派生自bigop(init, report)的大型动态内部数据结构进行操作,并接受可调用的. 函数返回当前状态的摘要。datainitreport(data)status(data)data
函数bigop调用每个主要步骤report的当前状态,data依次调用status. data为每个步骤复制(或使其持久化)会很昂贵,因此report必须在每个步骤完成才能bigop继续。
函数view(gen)接受生成gen状态摘要的连续值的生成器,并在生成时显示每个值的可视化。该函数view根据迄今为止生成的值维护内部状态。(在我的特殊情况下,可以复制这种内部状态,但最好避免。)
假设函数bigop不能view改变。
问题:如何定义gen、report和 一个程序main,以便bigop在 上运行,并在到达每个主要步骤init时显示状态报告值的可视化? bigop
难点就在于此,report并且gen在其他函数内部被调用,所以通常的 Python 协程模式是不适用的。(在我的特殊情况下,bigop实际上是一个生成器。)
之前关于使用回调从普通函数生成生成器的问题是使用线程回答的,但我想知道是否有更简单的方法。
注意:只有与 Python 2.7 兼容的答案对我有用;但如果差异是相关的,我很想看看 Python 3 的答案。
def bigop(init, report):
    data = init
    while data < 10:           # complicated condition
        print 'working ...'
        data += 1              # complicated operation
        report(data)
def view(gen):
    for value in gen:
        print value            # complicated display routine
def main(init):
    """
    example:
    >> main(7)
    'working ...'
    8
    'working ...'
    9
    'working ...'
    10
    """
    pass
问题:如何定义main?