迭代器和生成器之间有什么区别?关于何时使用每种情况的一些示例会很有帮助.
我尝试定义一个生成器函数mycount(),可以使用生成器函数重置,send(0)如下例所示.一切正常,除非我使用send(0)尚未启动的新生成器对象.在这种情况下,它给出了一个TypeError.是否有任何函数检查生成器是否已启动,或者我是否必须捕获TypeError并mycount(0)在这种情况下创建新的生成器对象?
def mycount(value):
while True:
v = yield value
if v == None:
value = value + 1
else:
value = v
g = mycount(3)
print(next(g)) # prints 3
print(next(g)) # prints 4
print(g.send(0)) # prints 0
print(next(g)) # prints 1
print(next(g)) # prints 2
g2 = mycount(3)
g2.send(0)
# TypeError: can't send non-None value to a just-started generator
Run Code Online (Sandbox Code Playgroud) 有可能知道是否使用了发电机?即
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()调用计数器的类来包装它.有没有简单的方法呢?