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中提供的通过简便的方法写出迭代器的一种手段
包含关系:可迭代对象>迭代器>生成器
相关推荐
麦麦在写代码18 小时前
前端学习5
前端·学习
降临-max19 小时前
JavaSE---网络编程
java·开发语言·网络·笔记·学习
大白的编程日记.20 小时前
【计算网络学习笔记】MySql的多版本控制MVCC和Read View
网络·笔记·学习·mysql
u***42071 天前
Golang 构建学习
开发语言·学习·golang
车载测试工程师1 天前
CAPL学习-IP API函数-2
网络·学习·tcp/ip·capl·canoe
YJlio1 天前
进程和诊断工具学习笔记(8.29):ListDLLs——一眼看清进程里加载了哪些 DLL,谁在偷偷注入
android·笔记·学习
车载测试工程师1 天前
CAPL学习-IP API函数-1
网络·学习·tcp/ip·capl·canoe·doip
YJlio1 天前
ShareEnum 学习笔记(9.5):内网共享体检——开放共享、匿名访问与权限风险
大数据·笔记·学习
brave and determined1 天前
接口通讯学习(day05):智能手机的内部高速公路:揭秘MIPI CSI与DSI技术
学习·智能手机·软件工程·制造·csi·mipi·dsi
Tonya431 天前
测开学习DAY37
学习