excellent
我觉得我只可以看懂字面意思
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:}
努力学习中!!!!!
原来小甲鱼这里搜刮了这么多好东西{:10_254:},我搜索异常代码过来的。
看了之后神清气爽,解决了大部分问题,稍微有点困惑的是prime_generator.send(None)。
真心的看不懂
老师辛苦了,还在研究中...
magical_infinite_range(start)这是什么函数?
{:10_257:}{:10_257:}{:10_257:}
看完了还是很懵逼{:10_266:}{:10_285:}
{:5_110:}
我有一个问题:
既然列表 元组 字符串都是迭代器,那为什么next()方法不能用呢???
例子:有趣的素数,get_primes的定义里append()的括号里少一个element
虽然看不太懂,还是有收获的。谢谢小甲鱼老师~
看不懂send的用法和逻辑
今天继续努力............
努力以后找个好工作.........
上面代码和对应的描述写的有点凌乱啊,,我傻傻分不清小甲鱼在分析哪段代码啊
最后一段代码: 借用楼里鱼油的代码分析一下(感谢这位鱼油的代码,加了几个标签以后更易懂了)
import random
def get_data():
"""返回0到9之间的3个随机数"""
return random.sample(range(10), 3)
def consume():
"""显示每次传入的整数列表的动态平均值"""
running_sum = 0
data_items_seen = 0
while True:
print("——3——")#.send( )返回前的最后一个位置
data = yield
print("——2——") #.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):
"""产生序列集合,传递给消费函数(consumer)"""
while True:
data = get_data()
print('Produced {}'.format(data))
consumer.send(data)
yield
print("——1——")#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。。下一次执行再重复