python学习之生成器&三者关系

1.生成器 generator

python中一边循环一边计算的机制,叫做生成器

1.1生成器表达式

列表推导式

复制代码
li = [i*5 for i in range(5)]
print(li)
gen = (i*5 for i in range(5)) #列表推导式的[]改为()就成了生成器表达式
print(gen)
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))

1.2生成器表达式

python中,使用yield关键字的函数就称之为生成器表达式

yield的作用:

1.类似return,将指定值或多个是返回给调用者

2.yield语句一次返回一个结果,在每个结果中间,挂起函数,执行__next__(),再重新从挂起点继续往下执行

使函数中断,并保存状态

复制代码
li = []
def test():
    global li
    li.append('a')
    print('li:',li)
test()
test()
生成器函数
def gen():
    print("开始了")
    yield 'a'  #返回了一个'a',并暂停函数,在此处挂起,下一次再从此处恢复执行
    yield 'b'
    yield 'c'
gen_01 = gen()
print(gen_01)
print(next(gen_01))
print(next(gen_01))
print(next(gen_01))
复制代码
def gen_2(n):
    li = []
    # for i in range(n):
    #     li.append(i)
    a = 0
    while a <= n:
        li.append(a)
        yield a
        a += 1
    print('li: ',li)
print(gen_2(9))
for i in gen_2(9):
    print(i)
复制代码
# 使用yield关键字就是生成器函数
def test_a():
    yield 1
    yield 2
    yield 3
print(test_a())
ta = test_a()
print(next(ta))   #从对象里面取值
print(next(ta))
print(next(ta))
print(next(test_a()))  #加括号是调用函数,永远都是<generator object test_a at 0x00000233D5F40F90>的下一个,也就是1
print(next(test_a()))
print(next(test_a()))
复制代码
4.三者关系
可迭代对象只实现了python迭代协议,可以通过for...in...循环遍历的对象,比如list、dict、str...、迭代器、生成器
迭代器: 可以记住自己遍历位置的对象,直观体现就是使用next()函数返回值,迭代器只能往前,不能往后(单向),当遍历完毕后,迭代器会抛出异常StopIteration
生成器:是特殊的迭代器,需要注意一下迭代器不一定是生成器,它是python中提供的通过简便的方法写出迭代器的一种手段
包含关系:可迭代对象>迭代器>生成器
相关推荐
lifallen8 分钟前
Orca 与 Emdash:同样管理多个 Agent,差别在谁来调度
人工智能·学习·ai·软件构建·开源软件·ai编程
runafterhit14 分钟前
【学习地图】ARM嵌入式类 · 文章索引
arm开发·学习
沐-风_23 分钟前
双通道LVDS(Dual‑Link)Link0 / Link1:硬件、软件、标准
嵌入式硬件·学习
风吹心凉2 小时前
ROS2核心概念
学习
jaysee-sjc3 小时前
【JavaWeb】Tlias智能学习辅助系统|后端Web实战(登录认证)
java·开发语言·前端·学习·mybatis
MartinYeung53 小时前
[论文学习]AdInject:通过广告投放对Web代理发起真实世界黑盒攻击
前端·学习
runafterhit3 小时前
【学习地图】Linux学习类 · 文章索引
linux·运维·学习
黑泽明*4 小时前
LVS-Keepalived-全解析
服务器·开发语言·笔记·学习·php
大模型码小白4 小时前
AI安全前沿:AI大模型安全防护的前沿技术
java·网络·人工智能·python·深度学习·学习·安全
天天爱吃肉82185 小时前
【工程师硬件学习笔记:串口‑总线体系与三电试验室异构系统集成深度实战】
大数据·笔记·python·嵌入式硬件·学习·汽车