l =[11,22,33,44,55,66,77,88,99]
res =(i+1for i in l if i!=44)"""
生成器表达式内部的代码只有在迭代取值的时候才会执行
"""print(res.__next__())# 12print(res.__next__())# 23"""
迭代器对象 生成器对象 我们都可以看成是"工厂"
只有当我们所要数据的时候工厂才会加工出"数据"
上述方式就是为了节省空间
"""
生成器面试题
defadd(n, i):return n + i
deftest():for i inrange(4):yield i
g = test()# 初始化生成器对象for n in[1,10]:
g =(add(n, i)for i in g)
res =list(g)print(res)
面试题解析
# 函数求和defadd(n, i):return n + i
# 调用之前是函数 调用之后是生成器deftest():for i inrange(4):yield i
g = test()# 初始化生成器对象 for n in[1,10]:
g =(add(n, i)for i in g)'''
第一次for循环
g = (add(n, i) for i in g) 此时in后面g为test生成器
第二次for循环
g = (add(n, i) for i in g) 此时的g为第一次for循环得到的生成器g
所以此时的可以看成 g = (add(n, i) for i in (add(n, i) for i in g))
'''
res =list(g)'''
调用时g是一个生成器 n的值为10 in后面的g 生成器产生的值就是 range(4)
g 可以看成
g = (add(10, i) for i in (add(10, i) for i in range(4)))
'''print(res)# [20,21,22,23]