生成器补充

def test():
    for i in range(4):
        yield i
t=test()  
t1=(i for i in t)   #t1 就是把t这个生成器再次用表达式生成t1生成器
def test():
    for i in range(4):
        yield i
t=test()    #这个生成器里还没有值 只有执行了里面才有值 不next就没值

for i in t:
    print(i)
    
t1=(i for i in t)
print(list(t1)) #可以用list获取生成器里的值

0
1
2
3
[]      #为什么会空?因为print(i)的时候已经遍历了所有元素 第二次打印已经没有运行了

def test():
    for i in range(4):
        yield i
t=test()

t1=(i for i in t)    # 获取内存地址 因为没有打印所以没有遍历 有打印了才是遍历
t2=(i for i in t1)    # 获取内存地址
print(list(t1))         #遍历t1 t1的值来自于t 而t没有遍历过 所以取t1的值等于取t的值
print(list(t2))      #遍历t2 t2的值来自于t1 但是t1已经遍历过了

[0, 1, 2, 3]
[]

 

posted on 2018-05-09 09:06  monster7  阅读(76)  评论(0)    收藏  举报

导航