时间:2021-05-22
这篇文章主要介绍了python yield和Generator函数用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
首先我们从一个小程序导入,各定一个list,找出其中的素数,我们会这样写
import mathdef is_Prims(number): if number == 2: return True //除2以外的所有偶数都不是素数 elif number % 2 == 0: return False //如果一个数能被除1和本身之外的数整除,则为合数。其实我们的判定范围到根号n就可以 for cur in range(2,int(math.sqrt(number))+1,2): if number % cur == 0: return False else: return Truedef get_Prims(input_list): result_list = list() for element in input_list: if is_Prims(element): result_list.append(element) return result_listaa = get_Prims([1,2,3,4,5,6,7,8,9])print (aa)但如果我们想给定一个数,然后列出比这个数大的所有素数呢?我们可能这样写:
def get_Prims(number): if is_Prims(number): return number但是一旦return函数将控制权交给调用者后彻底结束,任何局部变量和函数工作都被丢弃,下一次调用又会从头开始。因此我们就可以用一下写法:
def get_Prims(number): while(True): if is_Prims(number): yield number number += 1def get_numbers(): total = list() for next_prim in get_Prims(2): if next_prim < 100: total.append(next_prim) else: print(total) returnget_numbers()下面解释一下generator函数,一个函数的def代码里包含了yield,函数就自动成为了一个generator函数(及时仍包含有return),generator函数创建generator(一种特殊形式的迭代器,这个迭代器有一个内置__next__()方法),当需要一个值的时候通过yield来产生而不是直接return,因此与一般函数不同的是,此时控制权并未交出。
for循环会隐式的调用next()函数,next()函数负责调用generator中的__next__()方法,此时generator负责返回一个值给任何调用next()的方法,利用yield将此值传回去,相当于return语句。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
测试环境win10python3.5yield功能简介简单来说,yield的作用就是把一个函数变成一个generator,带有yield的函数不再是一个普通函数
您可能听说过,带有yield的函数在Python中被称之为generator(生成器),何谓generator?我们先抛开generator,以一个常见的编程题
您可能听说过,带有yield的函数在Python中被称之为generator(生成器),何谓generator?我们先抛开generator,以一个常见的编程题
本文实例讲述了python生成器generator用法。分享给大家供大家参考。具体如下:使用yield,可以让函数生成一个结果序列,而不仅仅是一个值例如:def
一个带有yield的函数就是一个generator,它和普通函数不同,生成一个generator看起来像函数调用,但不会执行任何函数代码,直到对其调用next(