python 生成器
Posted pengdachui-1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 生成器相关的知识,希望对你有一定的参考价值。
1. 生成器和生成器函数
生成器的本质就是迭代器
生成器的三种创建办法;
1. 通过生成器函数
2. 通过生成器表达式创建出生成器
3. 通过数据转换
生成器函数:
函数包含了yield的就是生成器函数
注意:生成器函数被执行,获取的是生成器(迭代器),而不是函数的执行
生成器表达式:
(结果(变量) for 变量 in 可迭代的对象 筛选) 没有元祖推倒式
取值:
1. __next__()
2. send(值) 给上一个yield位置传一个值, 第一个和最后一个yield不用传值
3. 可以for循环
4. list(g(生成器))
生成器的特点:
1. 节省内存
2. 惰性机制
3. 只能往前
1. 生成器的简单应用
def func(): print(‘最近变帅呢?‘) yield ‘没有‘ # 有yield的函数是生成器 print(‘知道知道‘) # 最后一个yield之后如果在进行__next__() 会报错 it = func() # it 是生成器 print(it.__next__()) # it(生成器)的本质是迭代器,可以当迭代器使用 # return和yield的区别: # return 直接返回结果, 结束函数的调用 # yield 返回结果, 可以让函数分段执行
2. 使用生成器的三种方法:
def func(): yield ‘最近天气有点热‘ yield ‘没毛病‘ yield ‘你们的作业还没写完呢?‘ yield ‘下个月,准备吃草了!‘ print(12) g = func() # 拿到的是生成器,生成器的本质是迭代器,迭代器可以被迭代,生成器可以直接for循环 # 方法一: for i in g: print(i) # 本质上执行的是__next__(),函数里面的yield的有多少就打印多少 # 方法二: print(g.__next__()) # 把生成器当迭代器使用,打印yield后面的内容 print(g.__next__()) print(g.__next__()) print(g.__next__()) it = g.__iter__() # 把生成器转换成迭代器 print(it.__next__()) print(it.__next__()) print(it.__next__()) print(it.__next__()) print(it.__next__()) # 报错 # 方法三: # 用异常处理 it = g.__iter__() while True: try: print(it.__next__()) # 把函数里面的内容打印完 except StopIteration: break
3. 可以相当于迭代器使用
def func(): num = 1 while num < 50: yield ‘第%d名‘ % num num += 1 g = func() print(g.__next__()) print(g.__next__()) print(g.__next__()) print(g.__next__())
以上是关于python 生成器的主要内容,如果未能解决你的问题,请参考以下文章