def y(list):
for i in list:
yield i
def exec(g):
print(list(g))
for i in g:
print(i)
t = (123, 'xyz', 'zara', 'abc')
g = y(t)
exec(g)
print(list(g))就会影响下面的输出
但是print(g)是不会影响的呢
g是一个迭代器,这里迭代的是t,list(g)已经把t迭代完了,再加上一般迭代器是不能回溯的,所以后面在遍历g的时候是没什么可被迭代的了,换成next的写法就一目了然了
在下小白 能否说的更详细一点 谢谢
执行了的
你的图只能看出来执行了 for 看不出来执行了print(i)呢
@超灬超: 这个迭代器到底了,没有next了,并没有进入循环
我理解的很浅,
g=y(t) 这样得到的g其实是一个 iterator,这个迭代器只能执行一次,
当print时会执行一次,
后面 for i in g ,这个时候 g 是空的。
至于迭代器为什么只能执行一次,还不了解。
我又看了一下:
迭代器是访问集合元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。(https://www.cnblogs.com/spiritman/p/5158331.html)
我觉得和指针差不多,迭代器存一个位置,每次调用next就走到下一个位置,走到尾巴就没有next了。
for循环的本质也是调用next去执行。
@Masako: 后面我看了下,iterator的本意是用在大数据的处理,超出内存大小限制的数据,数据不读取到内存(对于这一点我还是不怎么理解)。(https://stackoverflow.com/questions/3266180/can-iterators-be-reset-in-python)
其实它已经超出语法的层面了。