您的位置:首页 > 编程语言 > Python开发

python3--生成器

2019-05-21 14:56 176 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/mh_dream/article/details/90374020

生成器

  • 包含yield语句。函数使用yield而不是return返回结果。yield一次生成一个值后,函数停止执行,处于挂起状态,被重新激活后,从停止处继续执行。
  • 本质是迭代器,实现了迭代器的功能。
  • 优点:不会一次性在内存中生成太多数据,根据需要生成。
  • 获取生成值的方法:__next__()或者send(参数),但是send(参数)不能用在首次获取生成值的时候。
  •  yield from 等价 for 循环 yield
[code]def gen1():
x = 1
yield x
print('***' ,x)
y = 2
yield y
print('*****' ,y)

ge1 = gen1()
print(ge1.__next__())   # 1
print(ge1.send(''))     # *** 1  此处send(参数)作用与__next__()一致
# 2

def gen2():
x = 1
con1 = yield x
print('***' ,con1)
y = 2
yield y

ge2 = gen2()
print(ge2.__next__())   # 1
print(ge2.send('hi'))   # *** hi 此处send(参数)的作用是在获取下一个yield值的时候,给上一个yield处的变量传递一个值
# 2

# yield from <==> for 循环  yield
def gen3():
yield from 'abc'
print(list(gen3()))  # ['a', 'b', 'c']

def gen4():
for i in 'abc':
yield i
print(list(gen4()))  # ['a', 'b', 'c']

列表推导式与生成器表达式

  • 列表推导式[],生成器表达式()
[code]# 列表推导式与生成器表达式
lis = [i for i in range(10)]  # 列表推导式
gen = (i for i in range(10))  # 生成器表达式,gen是个生成器表达式类型的生成器
print(lis)  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(next(gen))  # 0
  • 生成器表达式几乎不占内存,在数据量大的时候不会导致服务器卡死
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: