博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
对生成器的简单理解
阅读量:5287 次
发布时间:2019-06-14

本文共 1509 字,大约阅读时间需要 5 分钟。

#列表生成式 # def f(n): #     return n**3 # # x = [f(a) for a in range(10)] #首先调用f函数, # print(x) def bar():     print("ok1")     yield 1     print("ok2")     yield 2 s = bar()    #生成器还是一个可以记录状态的对象 当执行到哪里他会记住当前的执行状态,然后下次执行的时候,从上一次结束的地方开始执行 print(s) print(next(s)) print(next(s)) s = (x**3 for x in range(100000000))#此时就定义了一个生成器 print(s)   #
at 0x000000000BAF43B8> print(next(s))#0 print(next(s))#1 for x in s: #生成器本身就是一个可迭代对象 生成器为什么省内存 因为python本身有一个垃圾回收机制,当一个变量不在被引用的时候,这个变量就会被python清除 print(x) #0 0 1 1 2 3 5 8 def fib(max): n , before,after = 0, 0, 1, while n < max: yield before before, after = after, before+after n = n+1 g=fib(3) print(g) print(next(g))
#send方法 def loger():     count = yield "qwer"     print(count)     count = yield "qwer"     print (count) g = loger() #将生成器赋值给一个变量啊 a = next(g) #调用这个生成器,然后返回一个变量 然后让a 去接受这个变量 print(a) # g.send(None) # = next(g) b = g.send("abc")  #要使用send这个方法,首先要为这个生成器传递一个空的参数(None),因为不传递参数的话,send就不知道传递参数给谁接受不send 可以为生成器loger传递一个参数,但是首先要先执行一下这个生成器 print(b) g.send("efg") #yield实现伪并发
import timedef consumer(name):    print("%s 准备吃包子啦!" %name)    while True:       baozi = yield       print("包子[%s]来了,被[%s]吃了!" %(baozi,name))def producer(name):    c = consumer('A')    c2 = consumer('B')    c.__next__()    c2.__next__()    print("老子开始准备做包子啦!")    for i in range(10):        time.sleep(1)        print("做了2个包子!")        c.send(i)        c2.send(i)producer("alex")
 

转载于:https://www.cnblogs.com/langjitanya/p/10941526.html

你可能感兴趣的文章
一文读懂MapReduce
查看>>
30个新鲜的社会化图标集合
查看>>
线段树
查看>>
java基础知识点回顾
查看>>
Ado.Net五大对象
查看>>
C语言 读入-fgets()
查看>>
java interface
查看>>
Faiss学习:一
查看>>
c++沉思录 学习笔记 第五章 代理类
查看>>
排序算法(七) —— 快速排序
查看>>
查看 python安装目录
查看>>
HDU 1087 Super Jumping! Jumping! Jumping!
查看>>
关于datatable的一些操作以及使用adapter对数据的操作
查看>>
CSS圆角,输入框提示信息,JS查找同级元素
查看>>
Nginx反向代理Odoo并转为https
查看>>
关于二进制的利用
查看>>
HTTP头的Expires与Cache-control
查看>>
Docker Swarm集群部署
查看>>
JavaScript--学习
查看>>
表操作
查看>>