函数-生成器、迭代器

匿名 (未验证) 提交于 2019-12-02 22:51:30
#-----列表生成器-----
1 a = [x*2 for x in range(10)] 2 print(a,type(a)) #[0, 2, 4, 6, 8, 10, 12, 14, 16, 18] <class 'list'> 3  4 def f(n): 5     return n**3 6  7 a = [f(x) for x in range(10)] 8 print(a,type(a)) #[0, 1, 8, 27, 64, 125, 216, 343, 512, 729] <class 'list'>

#-----简单赋值方式
1 t = (12,45) 2 a,b = t 3 print(a)#12 4 print(b)#45

#----生成器(生成器就是可迭代对象)-----
 1 s = (x*2 for x in range(10))  2 for i in s:  3     print(i,end=" ") # 0 2 4 6 8 10 12 14 16 18  4   5 #可迭代对象 :内部有iter 方法  6 a = (1,2,3,5)  7 a.__iter__()  8 b = [2,3,4,5]  9 b.__iter__() 10 c = {"a":"d","g":"r"} 11 c.__iter__() 12 e = set(a) 13 print(e,type(e)) 14 e.__iter__()

#-----yield关键字生成斐波那契数列
 1 def fib(max):  2     n,before,after = 0,0,1  3     while n < max:  4         yield after  5         before,after = after,before+after  6         n += 1  7   8 g = fib(6)  9 for i in g: 10     print(i)

#-----yield 使用
 1 def bar():  2     print("ok1")  3     str1 = yield 1  4     print(str1)  5   6     print("ok2")  7     str2 = yield 2  8     print(str2)  9 b = bar() 10 next(b) 11 ret = b.send("ee") 12 print(ret)

#-----还可通过yield实现在单线程的情况下实现并发运算的效果
 1 import time  2   3 def tourist(name):  4     print("%s 开始吃包子" % name)  5     while True:  6         baozi = yield  #生成器函数(generator)  7         print("%s吃了第%s个" % (name, baozi))  8   9 def cook(name): 10     c1  = tourist("A") 11     c2 = tourist("B") 12     c1.__next__() 13     c2.__next__() 14     print("%s开始做包子了" % name) 15     for i in range(1,10): 16         time.sleep(0.2) 17         c1.send(i) 18         c2.send(i) 19 cook("dream")
View Code

#-----迭代器-----    1、有iter方法    2、有next方法
1 a = ["dream","rise","happy"] 2 d = iter(a) #<list_iterator object at 0x000001E01BFADA90> 3 print(d) 4 print(a.__iter__())#<list_iterator object at 0x00000258F8392668>
 
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!