是否可以知道是否使用了发电机?即。
def code_reader(code):
for c in code:
yield c
code_rdr = code_reader(my_code)
a = code_rdr.next()
foo(code_rdr)
foo
来电后,我想知道.next()
是否code_rdr
是否foo
被调用了next()
。
当然,我可以通过一些带有main-domain.xxx -> https://www.main-domain.xxx
sub.main-domain.xxx -> https://sub.main-domain.xxx
调用计数器的类来包装它。
有没有简单的方法呢?
答案 0 :(得分: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'
答案 1 :(得分:0)
我使用附加可能答案的想法,下面重新定义code_reader
功能:
def code_reader(code):
length = len(code)
i = 0
while i < length:
val = (yield i)
if val != 'position':
yield code[i]
i += 1
使用.send(&#39; position&#39;)我会知道要生成的下一个项目的位置,即
a = code_reader("foobar")
print a.next()
print a.send('position')
print a.next()
print a.send('position')
print a.send('position')
print a.next()
print a.send('position')
输出:
0
0
f
1
1
o
2