# ### 生成器 ''' #生成器本质是迭代器,允许自定义逻辑的迭代器 #迭代器和生成器区别: 迭代器本身是系统内置的.重写不了.而生成器是用户自定义的,可以重写迭代逻辑 #生成器可以用两种方式创建: (1)生成器表达式 (里面是推导式,外面用圆括号) (2)生成器函数 (用def定义,里面含有yield) ''' # (1) 生成器表达式 generator # [1,2,3,4] => [4,8,12,16] # i << 2 i乘以2的2次幂 gen = (i << 2 for i in range(1,5)) print(gen) from collections import Iterator,Iterable print(isinstance(gen,Iterator)) # (1)使用next进行调用生成器 res = next(gen) print(res) res = next(gen) print(res) res = next(gen) print(res) res = next(gen) print(res) # res = next(gen) 小心越界 # print(res) # (2) 使用for循环调用生成器 gen = (i << 2 for i in range(1,5)) for i in gen: print(i) # (3) 用for 和next 搭配调用生成器 gen = (i << 2 for i in range(1,5)) for i in range(2): res = next(gen) print(res)