'''
yield关键字:
yield是Python中一个特殊的关键字。它就是生成器
迭代其实就是循环的概念:
1.可迭代对象:可以通过循环来实现操作的对象。
2.迭代器:属于可迭代对象,一次只能取一个值,一直取值到全部取完为止。(程序终结为止)
3.生成器:是特殊的迭代器,只能通过yield来声明。
yield关键字只能用在函数或者方法之中。
yield类似于return关键字。都属于返回数据。return调用函数终止运行。yield调用后,
一次只生成一个值,一直到值生成完位置。在运行期间,处于挂起状态,随时调用随时获取。
'''
# 可迭代对象
# s = 'poinkjehhsadfoian'
# for i in s:
# print(i)
# 迭代器:readline()就是标准的迭代器的形态。
# 自定义的迭代器实现:只有可迭代对象 ,才可以转为迭代器
# print(type(s))
# for i in it:
# print(i)
# print(next(it)) # next()读取迭代器中的值,每次读取一个值,类似于file.readline().只能用于迭代器使用
# print(next(it))
# print(next(it))
# 生成器
# def func():
# for i in range(0, 10):
# # return i #return调用后,函数终止运行,只会返回0
# yield i #yield执行一次后,处于挂起状态,后续调用时继续产生数据。一直到生成器结束。
# f = func() # 调用函数,获取生成器
# print(next(f)) # 基于next获取生成器返回值
# print(next(f))
# print(next(f))
# print(next(f))
'''
基于yield猜想操作文件的源码:
def readlines():
for line in file.readlines():
yield line
'''
'''
测试流程
1. 测试初始化
2. 执行测试
3. 测试收尾结束
'''
def func():
#测试前
print('函数中的测试初始化')
data = '函数产生的测试数据'
# 测试中
yield data #将测试数据提取,交由实际测试执行
# 测试后
print('函数中的测试结束')
print('测试开始')
# f = func()
func()
# print('测试执行中')
# print(next(f))
# print('测试结束')
# print(next(f))