dlbest 发表于 2017-4-3 15:07:30

excellent

lbing89 发表于 2017-5-7 22:02:55

我觉得我只可以看懂字面意思

jli 发表于 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)


虽然前面验证得都对,可是到后面数越来越大得时候很久都不出答案,蛋疼{:10_249:}

wyh2006 发表于 2017-6-2 21:28:58

努力学习中!!!!!

秋名86 发表于 2017-6-6 04:11:49

原来小甲鱼这里搜刮了这么多好东西{:10_254:},我搜索异常代码过来的。

dahuangfeng 发表于 2017-6-6 14:56:28

看了之后神清气爽,解决了大部分问题,稍微有点困惑的是prime_generator.send(None)。

花寺情僧 发表于 2017-6-7 23:10:00

真心的看不懂

阿飞23 发表于 2017-6-18 01:42:40

老师辛苦了,还在研究中...

雪山一刀 发表于 2017-7-19 15:51:41

magical_infinite_range(start)这是什么函数?

持久银信 发表于 2017-8-7 11:08:05

{:10_257:}{:10_257:}{:10_257:}

木一 发表于 2017-8-17 13:31:45

看完了还是很懵逼{:10_266:}{:10_285:}

再续植物人 发表于 2017-8-20 18:23:40

{:5_110:}

hata16 发表于 2017-8-29 22:27:49

我有一个问题:
   既然列表 元组 字符串都是迭代器,那为什么next()方法不能用呢???

JXZ 发表于 2017-11-12 18:48:44

例子:有趣的素数,get_primes的定义里append()的括号里少一个element

付盼 发表于 2017-12-24 16:18:22

虽然看不太懂,还是有收获的。谢谢小甲鱼老师~

小进同学 发表于 2018-1-11 20:55:04

看不懂send的用法和逻辑

zhang3911 发表于 2018-1-23 09:48:02

今天继续努力............

zhang3911 发表于 2018-1-23 09:48:40

努力以后找个好工作.........

木棉花-华工 发表于 2018-3-7 11:15:30

上面代码和对应的描述写的有点凌乱啊,,我傻傻分不清小甲鱼在分析哪段代码啊

况qiqi 发表于 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 ,,执行consumer这个生成器,,接着从上次停下的地方继续运行,data等于传入的参数也就是生成的随机数,打印——2——,计算打印出平均值,打印出——3——,停在yield之前,,返回到produce停在yield。。下一次执行再重复
页: 1 2 [3] 4 5 6 7 8
查看完整版本: 提高你的 Python:解释 yield 和 Generators(生成器)