Python基础——生成器

Python基础——生成器

生成器

简单理解:生成器就是一个迭代器
生成器本身是一个函数,区别在于;

  1. 使用了 yield 的函数——生成器
  2. 函数的返回值是一个:迭代器
  3. 函数只能return一次,生成器可以return多次
  4. 在调用生成器(函数)的过程中,当遇到关键字 yield 暂停运行该函数,并保存当前所有的运行信息返回 yield的值,在下一次调用的时候,从当前位置继续运行。

自定义一个生成器

#定义一个生成器:带有yield关键字的函数
def func():
	print('start')
	a = yield 1#遇到yield关键字停止运行
	print(a)
	print('middle')
	b = yield 2
	print(b)
	print('next')
	c = yield 3
	print(c)#***********
	

调用生成器

生成器本身是一个函数,所以调用方法不变
不同:
执行下面的语句并不会执行函数里边的方法体,而是返回一个迭代器对象
next()的时候才会执行函数里的方法

#调用迭代器函数
name = func()

迭代器<==>生成器
所以对 生成器的访问同迭代器用next()方法
此时的 name就是一个迭代器了,访问的方法同 迭代器,用:

next(迭代器名)

第一次访问:

print('----------第一次调用-------------')
print(next(obj))

在这里插入图片描述
第二次访问

print('----------第一次调用-------------')
print(next(obj))
print('----------第二次调用-------------')
print(next(obj))

a = yield 1 语句第一次已经执行完,第二次从 print(a)开始执行,所以此时的 a = None
在这里插入图片描述
第三次访问:

print('----------第一次调用-------------')
print(next(obj))
print('----------第二次调用-------------')
print(next(obj))
print('----------第三次调用-------------')
print(next(obj))

b = yield 2 语句第二次已经执行完,第三次从 print(a)开始执行,所以此时的 b = None
在这里插入图片描述
第三次next()之后,函数中的print©语句没有被执行

生成器的作用

生成器可以简单的理解成迭代器,所以
作用:省内存
比如从外部读取文件时,用一次,readlines()一次避免一次全部读取,从而节省内存。


生成器使用例子

生成器 + 读取文件

文件中的内容及格式
在这里插入图片描述

#定义一个函数
def txt_read(filename):
	#打开文件
	with open (filename,mode='r',encoding='utf-8') as fin
		for  line in fin:#遍历读取每一行数据
			yield line

#调用生成器
reader = txt_read('test.txt')
print('-----------取第一次--------------')
print(next(reader))
print('-----------取第二次--------------')
print(next(reader))

在这里插入图片描述
遍历迭代器:

def txt_read(filename):
    with open(filename,mode='r',encoding='utf-8') as fin:
        for line in fin:
            yield line.strip()

reader = txt_read('test.txt')
print('--------循环编列迭代器------------')
for line in reader:
    print(line)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

企鹅家的北极熊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值