8.5 生成器函数定义与使用(书稿节选)
如果函数中包含yield语句,那么调用这个函数得到的返回值不是单个值,而是一个包含若干值的生成器对象,这样的函数也称生成器函数。代码每次执行到yield语句时,返回一个值,然后暂停执行,当通过内置函数next()、for循环遍历生成器对象元素或其他方式显式“索要”数据时再恢复执行。生成器函数得到的生成器对象和4.3节生成器表达式得到的生成器对象一样,只能从前向后逐个访问其中的元素,并且每个元素只能使用一次。下面的代码演示了生成器函数的几种形式。
运行结果为:
例8-4 编写生成器函数,模拟标准库itertools中cycle()函数工作原理。
解析:标准库itertools中的cycle()函数用来把有限长度可迭代对象中的元素首尾相接构成并返回一个无限循环的环,类似于原可迭代对象中的元素进行无限次的重复。在程序中,使用外层的while循环实现无限次重复,使用内层的for循环实现原可迭代对象中所有元素从头到尾的一次遍历。在生成器函数myCycle()开始把参数iterable转换为元组,是为了避免参数为map对象、生成器对象之类的惰性求值对象时每个元素只能使用一次的特点带来的错误。
运行结果为:
讲解视频:
公众号“Python小屋”
标签:函数,迭代,19,元素,生成器,--,对象,使用 From: https://blog.51cto.com/u_9653244/6454504