鱼C论坛

 找回密码
 立即注册
楼主: 小甲鱼

[扩展阅读] 提高你的 Python:解释 yield 和 Generators(生成器)

  [复制链接]
发表于 2017-4-3 15:07:30 | 显示全部楼层
excellent
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-7 22:02:55 | 显示全部楼层
我觉得我只可以看懂字面意思  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-13 21:30:57 | 显示全部楼层
def add():
    yield 2

    x=2
    while 1:
        x=x+1
        flag=1
        for i in range(2,x):
            if x%i==0:
                flag=0
                break
        if flag:
            yield x



a=0
for i in add():
    if i<=200000:
        a+=i
    else:
        break

print(a)


虽然前面验证得都对,可是到后面数越来越大得时候很久都不出答案,蛋疼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-2 21:28:58 | 显示全部楼层
努力学习中!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-6 04:11:49 | 显示全部楼层
原来小甲鱼这里搜刮了这么多好东西,我搜索异常代码过来的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-6 14:56:28 | 显示全部楼层
看了之后神清气爽,解决了大部分问题,稍微有点困惑的是prime_generator.send(None)。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-7 23:10:00 From FishC Mobile | 显示全部楼层
真心的看不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-18 01:42:40 | 显示全部楼层
老师辛苦了,还在研究中...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-19 15:51:41 | 显示全部楼层
magical_infinite_range(start)这是什么函数?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-7 11:08:05 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-8-17 13:31:45 | 显示全部楼层
看完了还是很懵逼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-20 18:23:40 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-8-29 22:27:49 | 显示全部楼层
我有一个问题:
   既然列表 元组 字符串都是迭代器,那为什么next()方法不能用呢???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-12 18:48:44 | 显示全部楼层
例子:有趣的素数,get_primes的定义里append()的括号里少一个element
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-24 16:18:22 | 显示全部楼层
虽然看不太懂,还是有收获的。谢谢小甲鱼老师~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-11 20:55:04 | 显示全部楼层
看不懂send的用法和逻辑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-23 09:48:02 | 显示全部楼层
今天继续努力............
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-23 09:48:40 | 显示全部楼层
努力以后找个好工作.........
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-7 11:15:30 | 显示全部楼层
上面代码和对应的描述写的有点凌乱啊,,我傻傻分不清小甲鱼在分析哪段代码啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-28 14:22:57 | 显示全部楼层
最后一段代码: 借用楼里鱼油的代码分析一下(感谢这位鱼油的代码,加了几个标签以后更易懂了)
import random

def get_data():
    &quot;&quot;&quot;返回0到9之间的3个随机数&quot;&quot;&quot;
    return random.sample(range(10), 3)

def consume():
    &quot;&quot;&quot;显示每次传入的整数列表的动态平均值&quot;&quot;&quot;
    running_sum = 0
    data_items_seen = 0

    while True:
        print(&quot;——3——&quot;)  #.send( )返回前的最后一个位置
        data = yield
        print(&quot;——2——&quot;)   #.send( )调用后的第二个位置
        data_items_seen += len(data)
        running_sum += sum(data)
        print('The running average is {}'.format(running_sum / float(data_items_seen)))

def produce(consumer):
    &quot;&quot;&quot;产生序列集合,传递给消费函数(consumer)&quot;&quot;&quot;
    while True:
        data = get_data()
        print('Produced {}'.format(data))
        consumer.send(data)
        yield
        print(&quot;——1——&quot;)  #next( )调用后的第一个位置

if __name__ == '__main__':
    consumer = consume()
    consumer.send(None)
    producer = produce(consumer)

    for _ in range(10):
        print('Producing...')
        next(producer)
运行时,首先通过consumer.send(None)启动生成器,运行到yield前一句,打印出——3——
然后打印proceducing(这里还没有学到),,,通过next()获取下一个值,,先打印出Produced [0, 7, 9],,执行consumer这个生成器,,接着从上次停下的地方继续运行,data等于传入的参数也就是生成的随机数,打印——2——,计算打印出平均值,打印出——3——,停在yield之前,,返回到produce停在yield。。下一次执行再重复
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-2 13:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表