什么是生成器python
能够理解为数据类型,自动实现了 迭代器协议(其余的数据类型须要调用本身内置的__iter__方法,因此生成器是可迭代对象
编程
生成器分类及在python中的表现:app
1.生成器函数:常规函数定义, 使用yield语句 而不是return语句 返回结果, yield语句一次返回一个结果函数
def test(): yield 1 yield 2 # 取代了return的位置 不会终止程序 g = test() print(g) print(g.__next__) print(g.__next__)
2. 生成器表达式: 相似于 列表推到, 可是生成器 返回按需产生的结果spa
#三元表达式 name = 'lyg' res = 'SB' if name =='lyg' else 'noob' print(res)
#列表解析 egg_list = [] for i in range(10): egg_list.append('鸡蛋%s' %i) print(egg_list)
l = ['鸡蛋%s' %i for i in range(10)]
# l = [i for i in range(10 if i>5] #没有四元 没有else
print(l)
# 与列表解析 l = ('鸡蛋%s' %i for i in range(10)) # 生成器外部用括号表示 而不是 [] # l 生成器表达式形式 print(l) print(next(l)) # Next 本质就是调用__next__ print(l.__next__())
总结:code
1: 列表解析的 [] 换成()就是 声称其表达式对象
2: 列表解析与 生成器表达式都是 遍历编程方式,只不过 生成器表达式更节省内存blog
3: Python不但使用迭代器协议,让for循环变得更加通用。大部份内置函数也使用迭代器协议访问对象内存
sum(x ** 2 for x in range(4)) # 而不是 sum ([x ** 2 for x in range(4)])
生成器总结 it
yield两个特色: