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中提供的通过简便的方法写出迭代器的一种手段
包含关系:可迭代对象>迭代器>生成器
相关推荐
微露清风4 小时前
系统性学习Linux-第二讲-基础开发工具
linux·运维·学习
阳光九叶草LXGZXJ5 小时前
达梦数据库-学习-48-DmDrs控制台命令(同步之Manager、CPT模块)
linux·运维·数据库·sql·学习
biuyyyxxx5 小时前
Python自动化办公学习笔记(一) 工具安装&教程
笔记·python·学习·自动化
丝斯20116 小时前
AI学习笔记整理(66)——多模态大模型MOE-LLAVA
人工智能·笔记·学习
军军君017 小时前
Three.js基础功能学习十三:太阳系实例上
前端·javascript·vue.js·学习·3d·前端框架·three
bylander8 小时前
【AI学习】TM Forum《Autonomous Networks Implementation Guide》快速理解
人工智能·学习·智能体·自动驾驶网络
xxxmine8 小时前
redis学习
数据库·redis·学习
Yff_world9 小时前
网络通信模型
学习·网络安全
野犬寒鸦10 小时前
从零起步学习并发编程 || 第一章:初步认识进程与线程
java·服务器·后端·学习
科技林总10 小时前
【系统分析师】6.3 企业信息化规划
学习