+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2019-08(58)

2019-09(95)

2019-10(18)

2019-11(2)

2019-12(17)

函数-生成器、迭代器

发布于2019-10-27 10:05     阅读(769)     评论(0)     点赞(17)     收藏(4)


0

1

2

3

4

#-----列表生成器-----

复制代码
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>



0

1

2

3

4

5

6

7

8

9



所属网站分类: 技术文章 > 博客

作者:83748wuw

链接: https://www.pythonheidong.com/blog/article/146399/e148969b71d38ee0baf1/

来源: python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

17 0
收藏该文
已收藏

评论内容:(最多支持255个字符)