相关疑难解决方法(0)

在另一个函数中调用生成器的yield

假设我有一些经理对象.这个对象的API有一个main_hook函数,它获取另一个函数f作为它的参数,并f在循环中运行给定的东西,在每次迭代之间做一些事情:

def main_hook(self,f):
    while (self.shouldContinue()):
        #do some preparations
        f(self)
        #do some tear down
Run Code Online (Sandbox Code Playgroud)

现在,我也有(更确切地说,想要)一个函数stop_and_do_stuff,一旦被调用,就停止main_hook在它的轨道中,将控制返回到所调用的函数main_hook,然后在该函数完成它正在做的事情之后,将控制权交还给main_hook和继续.基本上结果与做的一样

def main_hook(self,f):
    while (self.shouldContinue()):
        #do some preparations
        yield
        #do some tear down
Run Code Online (Sandbox Code Playgroud)

除此之外,yield我想打电话给f(),同时给出f打电话的选项self.stop_and_do_stuff()

不能通过使f也成为发电机来解决这个问题有两个原因:

1. f不是我的API的一部分 - 它是由使用我的lib的用户提供给我的

2.即使可以要求他使用yield,他需要调用的代码中的位置stop_and_do_stuff也不会直接位于f内,而是位于函数堆栈中的某个位置f(),而不是直接位于其中,例如

def h(manager):
    #do stuff
    if should stop:
        manager.stop_and_do_stuff()
    #do more stuff
def g(manager):
    #some stuff
    if should stop:
        manager.stop_and_do_stuff() …
Run Code Online (Sandbox Code Playgroud)

python yield function generator

9
推荐指数
2
解决办法
5137
查看次数

标签 统计

function ×1

generator ×1

python ×1

yield ×1