首页 > 编程语言 > 详细

Python -- 生成器

时间:2019-06-20 23:17:44      阅读:294      评论:0      收藏:0      [点我收藏+]

5.11 生成器

  1. 生成器初识 : 生成器本质就是迭代器。python社区生成器与迭代器是一种。生成器与迭代器的唯一区别:生成器是我们自己用python代码构建的。
  2. 生成器的产生方式:
    • 通过生成器函数
    • 通过生成器推导式
    • Python内置函数或者模块提供
# 之前的函数
def fucn():
    print(123)
    return 456
ret = func()
print(ret)
# 执行此函数,遇到return就结束函数,将数字 456 返回给ret

# 生成器函数: 只要函数中出现 yield 那么他就不是函数,是个生成器函数
def func():
    print(1)
    print(2)
    yield 3,4,5     #  多个值返回的是元组
    yield 4
    yield 5
ret = func()
print(ret)   # 在这打印出的结果是 生成器函数 func 的内存地址
# 生成器函数取值也是通过 next()  和迭代器一样
print(next(ret))
print(next(ret)) 
print(next(ret)) # 一个 next 对应一个 yield 超出会报错
  1. yield与return的区别
    • return一般在函数中只设置一个,作用是终止函数,并且给函数的执行者返回值(多个值通过元组的形式返回)
    • yield在生成器函数中可设置多个,并不会终值函数,next会获取对应yield生产的元素(多个值通过元组的形式返回)
# 举例 生成器函数的应用
def bun():
    for i in range(1,10001):
        yield f'{i}包子'
ret = bun()
for i in range(200):
    print(next(ret))
for i in range(200)
    print(next(ret))
# 多次next包子的序号是按照顺序记录的
  1. send(了解)
  2. yield与yield from
def func():
    l1 = [1, 2, 3]
    yield l1
ret = func()
print(next(ret))
print(next(ret))
print(next(ret))

# yield from  将一个可迭代对象的每一个元素返回给next,节省代码,提升效率 (代替for循环)
def func():
    l = [1,2,3,4,5]
    yield from l
ret = func()
print(next(ret))  # 1
print(next(ret))  # 2
print(next(ret))  # 3

Python -- 生成器

原文:https://www.cnblogs.com/Agoni-7/p/11061689.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!