• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

详解python之yield和Generator实例代码

python 搞代码 4年前 (2022-01-09) 24次浏览 已收录 0个评论

首先我们从一个小程序导入,各定一个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<strong style="color:transparent">本文来源gao@daima#com搞(%代@#码网@</strong>:            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语句。

以上就是详解python之yield和Generator实例代码的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:详解python之yield和Generator实例代码
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址