如何检查是否使用了发电机?

www*_*www 4 python yield generator

有可能知道是否使用了发电机?即

def code_reader(code):
   for c in code:
        yield c

code_rdr = code_reader(my_code)

a = code_rdr.next()

foo(code_rdr)
Run Code Online (Sandbox Code Playgroud)

经过foo电话,我想知道,如果.next()是呼吁code_rdr通过foo与否.当然我可以通过一些带有next()调用计数器的类来包装它.有没有简单的方法呢?

Chr*_*nds 9

Python 3.2+有inspect.getgeneratorstate().所以你可以简单地使用inspect.getgeneratorstate(gen) == 'GEN_CREATED':

>>> import inspect
>>> gen = (i for i in range(3))
>>> inspect.getgeneratorstate(gen)
'GEN_CREATED'
>>> next(gen)
0
>>> inspect.getgeneratorstate(gen)
'GEN_SUSPENDED'
Run Code Online (Sandbox Code Playgroud)