【python 基础篇 十二】python的函数-------函数生成器
创始人
2024-06-01 15:22:46
0

目录

      • 1.生成器基本概念
      • 2.生成器的创建方式
      • 3.生成器的输出方式
      • 4.send()方法
      • 5.关闭生成器
      • 6.注意事项

1.生成器基本概念

  • 是一个特色的迭代器(迭代器的抽象层级更高)
  • 所以拥有迭代器的特性
    • 惰性计算数据 节省内存 ----就是不是立马生成所有数据,而是到需要数据的时候在生成
    • 能够记录状态 并通过next()函数,访问下一个状态
    • 具备可迭代特性
  • 自己编写一个迭代器,比较复杂,需要实现很多方法,所以,就有了一个生产器

2.生成器的创建方式

  • 方式一
    • 生成器表达式 把列表推导式的[]修改成()
  • 方式二
    • 生成器函数 函数中包含yield语句,这个函数的执行结构就是“生成器”
#列表推导式  方式一
l = [i for i in range(1,100) if i % 2 == 0]
#生成 1-100之间的偶数组成的列表
#此时的列表推导式 是一次性生成所有的数据,如果使用生成器就不是一次性生成所有数据,而是等到使用的时候才会创建。
print(l)#输出 2 4 6 8 .....#生成器
l = (i for i in range(1,100) if i % 2 == 0)
print(l)#输出 at 0x000001B0DA075700>
#此时不会直接生成数据
#只有使用 next()才可以访问
print(next(l))#输出2
print(next(l))#输出4
#也可以使用 for  in 循环访问#生成器函数
def test():print("xxx")yield 1print("a")yield 2print("b")yield 3print("c")yield 4print("d")
g = test()#此时test函数没有被执行 
print(g)#输出 
print(next(g))# xxx 1
print(next(g))#a  2
#test函数形成一个生成器(迭代器),每次执行都到yield停止,并返回 yield 后面的数据

3.生成器的输出方式

  • 生成器具备迭代器的特性
  • 使用next()函数 等价于 生成器._ next _ ()
  • for in

4.send()方法

  • send方法有一个参数,指定的是上一次被挂起的yield语句的返回值
  • 相比于 . _ next _() 可以额外的给yield语句传值
  • 注意第一次调用 t.send(None)
def test():print("XXX")res1 = yield 1print(res1)res2 = yield 2print(res2)res3 = yield 3print(res3)
g = test()
print(g.__next__())#输出 XXX 1
print(g.__next__())#输出 None 2 此时的None是res1没有接收到数据 因为上一次走到yield 就停止了 res1没有接收数据
print(g.send("ooo"))#输出 ooo 3

5.关闭生成器

  • g.close()
  • 后续如果继续调用,会抛出StopIteration异常提示
def test():yield 1print("a")yield 2print("b")yield 3print("c")
g = test()
print(g.__next__())#输出 1
print(g.__next__())#输出 a 2
print(g.__next__())#输出 b 3
print(g.__next__())#输出 c
print(g.__next__())#输出 报错 StopIteration#如果是这样
print(g.__next__())#输出 1
print(g.__next__())#输出 a 2
g.close()
print(g.__next__())#输出 报错 StopIteration

6.注意事项

  • 如果碰到return 会直接终止,抛出StopIteration异常
  • 生产器只会遍历一次

相关内容

热门资讯

端午节安康问候语 端午节安康问候语  在日常学习、工作抑或是生活中,许多人都写过问候语吧,问候语可以传达对他人的关切和...
体育教师获奖感言   体育教师获奖感言一  尊敬的各位领导、来宾、同学们大家下午好:  我是来自上海市建平实验中学的王...
运动会获奖感言 运动会获奖感言1、从今早开始,我就一直忙于这边的工作,处理七七八八的小事。 我认为自己在后勤工作方面...
人生感言语录 精选人生感言语录40句  腾不出时间来睡觉的人,迟早会腾出时间来生病;腾不出时间来复习的人,迟早会腾...
川端康成经典语录 川端康成经典语录  在平平淡淡的日常中,大家都经常接触到语录吧,语录具有短小简约,不重文彩的特点。什...
树上春树爱情语录 树上春树爱情语录  在日常学习、工作或生活中,大家都接触过很多有名的语录吧,语录具有篇幅简短,语言精...
高中生班主任寄语 高中生班主任寄语(精选130句)  在平日的学习、工作和生活里,大家都尝试过写寄语吧,寄语是所传的话...
三生三世菩提树下经典语录 佛...   生即死,死亦生,生死不由于命,物定亦胜天,佛本道,道亦佛,佛道皆生于物,菩提本无树,何惧生死?下...
林徽因爱情语录 林徽因爱情语录  短暂的瞬间,漫长的永远,林徽因爱情语录。一代才女林徽因有哪些经典的爱情语录呢?下面...
孩子在家表现家长评语 孩子在家表现家长评语  在日常学习、工作和生活中,大家都写过评语吧,好的评语能给人以心理上的满足感,...
最新版哈利波特经典语录 最新版哈利波特经典语录  “就看你的了,哈利,要使他们看到,作为一名找球手,单靠一个有钱的爸爸是不够...
罪与罚中的经典语录 罪与罚中的经典语录  《罪与罚》俄国作家陀思妥耶夫斯基创作长篇小说的代表作。以下是小编为你整理的罪与...
人生感悟经典哲理语录 人生感悟经典哲理语录  你是一杯水,很好很好。尽管口径小了些,但有深度。切莫将它倒入盘子,涉猎面看似...
一年级学生评语 一年级学生评语(通用15篇)  在平平淡淡的学习、工作、生活中,许多人都有过写评语的经历,对评语都不...
亲人的寄语 亲人的寄语  无论是在学校还是在社会中,说到寄语,大家肯定都不陌生吧,寄语不限制文体,可以诗歌、可以...
周国平经典语录摘抄   周国平是中国研究哲学家尼采的著名学者之一。下面是小编为大家整理收集的关于周国平的经典语录,欢迎大...
初中暑假学习计划表 最新初中暑假学习计划表  导语:每一个学生最盼望的就是放暑假,暑假的到来虽然能让我们放松,但是也不能...
累觉不爱的伤感语录 累觉不爱的伤感语录  引言:当看破一切的时候,才知道,原来失去比拥有更踏实。接下来小编给各位读者分享...
王志心经典语录 王志心经典语录  在现实生活或工作学习中,大家肯定对各类语录都很熟悉吧,语录是指一个人言论的记录或摘...
适合朋友圈的经典语录 适合朋友圈的经典语录(精选50句)  微信朋友圈是微信的重要功能之一,我们都喜欢在上面发一些说说句子...