栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Python

生成器相关知识

Python 更新时间:发布时间: 百科书网 趣学号
生成器相关知识
# 1. 得到生成器方式一:推导式
g = (x * 3 for x in range(1, 5))
print(type(g))

# 两种方式得到生成器的元素
print(next(g))
print(next(g))
print(g.__next__())
print(g.__next__())


# 得到生成器方式二:借助函数完成
# 只要函数中出现了yield, 说明函数就不是函数啦,变成生成器啦。


def func():
    n = 0
    while True:
        n += 1
        yield n


print(func())
g = func()
print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__())
print(next(g))
print(next(g))
print(next(g))
print(next(g))


# 利用生成器产生n个斐波那契数列的数
def fib(n):
    a, b = 0, 1
    count = 0
    while count < n:
        yield a
        a, b = b, a + b
        count += 1
    return '没有更多元素了'  # 在取完元素后报错StopIteration的提示信息


f = fib(10)
print(next(f))
print(next(f))
print(next(f))
print(next(f))
print(next(f))
print(next(f))
print(next(f))
print(next(f))
print(next(f))
print(next(f))
利用生成器实现两个任务协作进行
def task1(n):
    for i in range(n):
        print(f'正在搬第{i}块砖')
        yield


def task2(n):
    for i in range(n):
        print(f'正在听第{i}首歌')
        yield


t1 = task1(5)
t2 = task2(10)

if __name__ == '__main__':
    """
    如果两个任务数不同 给两个任务设置状态
    如果两个任务都完成之后才退出
    """
    t1_status = False
    t2_status = False
    while True:
        try:
            t1.__next__()
        except Exception as err:
            print(err)
            t1_status = True
        try:
            t2.__next__()
        except Exception as err:
            print(err)
            t2_status = True
        if t1_status and t2_status:
            break

欢迎查看我的技术文档
网站有我的联系方式,欢迎学习交流

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/272801.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号