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中提供的通过简便的方法写出迭代器的一种手段
包含关系:可迭代对象>迭代器>生成器
相关推荐
2301_796512524 小时前
Rust编程学习 - 如何利用代数类型系统做错误处理的另外一大好处是可组合性(composability)
java·学习·rust
snakecy5 小时前
系统架构设计师学习大纲目录
学习·系统架构
im_AMBER5 小时前
React 15
前端·javascript·笔记·学习·react.js·前端框架
snakecy6 小时前
树莓派学习资料共享
大数据·开发语言·学习·系统架构
我的xiaodoujiao6 小时前
使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 24--数据驱动--参数化处理 Excel 文件 1
python·学习·测试工具·pytest
Nebula_g6 小时前
C语言应用实例:学生管理系统1(指针、结构体综合应用,动态内存分配)
c语言·开发语言·学习·算法·基础
小叮当⇔6 小时前
“征服式学习”提示词工具箱
学习·算法
Mark_Hide7 小时前
学习笔记7
笔记·学习
d111111111d7 小时前
STM32外设学习--TIM定时器--编码器接口(程序)
笔记·stm32·嵌入式硬件·学习
Anesthesia丶7 小时前
UV工具学习笔记
笔记·学习·uv