python yield和Generator函数用法详解
这篇文章主要介绍了pythonyield和Generator函数用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
首先我们从一个小程序导入,各定一个list,找出其中的素数,我们会这样写
importmath defis_Prims(number): ifnumber==2: returnTrue //除2以外的所有偶数都不是素数 elifnumber%2==0: returnFalse //如果一个数能被除1和本身之外的数整除,则为合数。其实我们的判定范围到根号n就可以 forcurinrange(2,int(math.sqrt(number))+1,2): ifnumber%cur==0: returnFalse else: returnTrue defget_Prims(input_list): result_list=list() forelementininput_list: ifis_Prims(element): result_list.append(element) returnresult_list aa=get_Prims([1,2,3,4,5,6,7,8,9]) print(aa)
但如果我们想给定一个数,然后列出比这个数大的所有素数呢?我们可能这样写:
defget_Prims(number): ifis_Prims(number): returnnumber
但是一旦return函数将控制权交给调用者后彻底结束,任何局部变量和函数工作都被丢弃,下一次调用又会从头开始。因此我们就可以用一下写法:
defget_Prims(number): while(True): ifis_Prims(number): yieldnumber number+=1 defget_numbers(): total=list() fornext_priminget_Prims(2): ifnext_prim<100: total.append(next_prim) else: print(total) return get_numbers()
下面解释一下generator函数,一个函数的def代码里包含了yield,函数就自动成为了一个generator函数(及时仍包含有return),generator函数创建generator(一种特殊形式的迭代器,这个迭代器有一个内置__next__()方法),当需要一个值的时候通过yield来产生而不是直接return,因此与一般函数不同的是,此时控制权并未交出。
for循环会隐式的调用next()函数,next()函数负责调用generator中的__next__()方法,此时generator负责返回一个值给任何调用next()的方法,利用yield将此值传回去,相当于return语句。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。