# 元组推导式
# 元组不能修改和删除
# generator 生成器
listvar = [1,2,3,4]
res = (i<<1 for i in listvar)
print(res) # <generator object <genexpr> at 0x10330e250>
print(type(res)) # <class 'generator'>
from collections.abc import Iterator, Iterable
print(isinstance(res, Iterator)) # True
print(next(res)) # 2
print(next(res)) # 4
print(next(res)) # 6
print(next(res)) # 8
#Error : print(next(res))
# generator 与 for 搭配使用
# yield 有点像 return
# 执行到yield这句话的时候会把这个值返回出去,会记住当前的位置
# 下次再次调用的时候会从上一次的位置向下走
# 格式 yield(3) 或 yield 3
res = (i<<1 for i in [1,2,3,4])
for i in range(2):
print(next(res))
# 含有yield关键字的函数是生成器的函数
def example():
print('张宇童')
yield 1
print('前沿技术博客')
yield 2
# 初始化生成器函数 形成生成器对象 gen
gen = example()
res = next(gen)
print(res) # 1
res = next(gen)
print(res) # 2
# 配合for使用 generator函数
res = example()
for i in range(2):
next(res) # 张宇童 前沿技术博客
res = example()
for i in res:
print(i)