常用的 for-in 循环形如:
for element in iterable: # do something with elementfor循环的内部实现是这个样子的:
# create an iterator object from that iterable iter_obj = iter(iterable) # infinite loop while True: try: # get the next item element = next(iter_obj) # do something with element except StopIteration: # if StopIteration is raised, break from loop break弄懂了这个底层原理后有助于解决 for x in my_set 这种 for 语句本身的异常问题.
带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator,调用 fibonacci(5) 不会执行 fibonacci函数,而是返回一个 iterable 对象!在 for 循环执行时,每次循环都会执行 fibonacci函数内部的代码,执行到 yield b 时,fibonacci函数就返回一个迭代值,下次迭代时,代码从 yield b 的下一条语句继续执行,而函数的本地变量看起来和上次中断执行前是完全一样的,于是函数继续执行,直到再次遇到 yield。