send 和next区别 next:唤醒并继续执行 send:唤醒并继续执行 发送信息到生成器内部. def fib(max): n,a,b = 0,0,1 while n < max: msg = yield b #yield b 赋值给msg,msg接收send来的信号. print(msg) if msg == "stop": break a,b = b,a+b n += 1 f = fib(15) #生成器对象 # for i in f: # print(i) next(…
yield作用 简单地讲,yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator.下面以斐波拉契数列来做个说明: # 普通的函数实现 def fib(max): n, a, b = 0, 0, 1 while n < max: print(b) a, b = b, a + b n = n + 1 return 'done' """不足: 在 fab 函数中用 pri…
调试 def creat_num(all_num): a, b = 0, 1 current_num = 0 while current_num < all_num: ret = yield a print(">>>ret>>>",ret) a, b = b, a+b current_num += 1 obj = creat_num(10) # obj.send(None) # send一般不会放到第一次启动生成器,如果非要这么做,传值必须用N…
列表推导与生成器表达式 当我们创建了一个列表的时候,就创建了一个可以迭代的对象: >>> squares=[n*n for n in range(3)] >>> for i in squares: print i 0 1 4 这种创建列表的操作很常见,称为列表推导.但是像列表这样的迭代器,比如str.file等,虽然用起来很方便,但有一点,它们是储存在内存中的,如果值很大,会很麻烦. 而生成器表达式不同,它执行的计算与列表包含相同,但会迭代的生成结果.它的语法与列表推导…