码迷,mamicode.com
首页 > 编程语言 > 详细

python基础 生成器send方法 迭代器

时间:2019-11-28 00:57:51      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:消费者   传值   start   语句   name   条件   one   获取数据   python基础   

 1 from collections import Iterable
 2 from collections import Iterator
 3 #如上篇博客所讲,生成器可以写成如下形式,当生成器被next()调用或循环,生成器运行到yield所在语句,yield后面紧跟变量将其值赋给yield,yield将其返回
 4 def str_ip(ip_start):
 5     for ip1 in range(256):
 6         for ip2 in range(256):
 7             for ip3 in range(256):
 8                 ip_str_format = "%s.%s.%s.%s"%(str(ip_start), str(ip1), str(ip2), str(ip3) )
 9                 yield ip_str_format
10     return "this is iter done" #迭代器中此处的return是抛异常时候的值
11 
12 #函数调用将其赋给一个变量,此时这个变量就是生成器
13 str_ip_gen = str_ip(66)
14 #使用生成器的next方法来获取数据
15 for i in range(30):
16     print(str_ip_gen.__next__())
17 
18 #下面代码使用迭代器的send方法从外面传值给yield达到并行运算的效果
19 def consumer(name):
20     print("准备吃包子了")
21     while True:
22         #此处直接用yield给变量赋值,达到外界传值给生成器的效果
23         baozi = yield
24         print("%s 吃了 %s 包子"%(name, baozi))
25 
26 #定义生产者,生产者使用生成器send方法将数据传递给消费者
27 def producer():
28     #构造两个生成器
29     con1 = consumer("xxx")
30     con2 = consumer("yyy")
31     #调用一次next方法,让生成器第一次走到yield的位置,准备下一次调用时接数据
32     con1.__next__()
33     con2.__next__()
34     #循环成产包子
35     for j in ["韭菜", "香菇", "豆腐"]:
36         #此处调用生成器send方法将值传递给yield,并且生成器向下迭代一次。
37         con1.send(j)
38         con2.send(j)
39 producer()
40 
41 #迭代器
42 #可用于for循环的有下面几种:1、集合类型:列表 元组 字典 集合 字符串等 2、生成器;可以被用于for循环的通车个可迭代对象,使用isinstance()判断
43 print(isinstance({}, Iterable))   #True,满足这样的条件都是可迭代对象
44 #可以被next方法调用并不断返回下一个值的称为迭代器,用下面语句判断一个对象是不是迭代器。生成器一定就是迭代器,符合迭代器的定义
45 print(isinstance({}, Iterator))   #False
46 #列表 字典等是可迭代对象但不是迭代器,使用iter方法可以将可迭代对象转换成迭代器
47 print(isinstance(iter({}), Iterator))   #True
48 
49 """
50 为什么列表 字典等可迭代对象不是迭代器呢?python是迭代器对象表示一种数据流,迭代器对象next方法获取数据流的下一个值;
51 直到没有数据时抛出StopIteration错误。可以把数据流看做有序的集合但是无法提前预知其长度,只能通过next方法向下走。
52 迭代器是惰性的,只有调用一次才向后走一步,但是其可以表示无限大的数据,而列表 字典等非迭代器不可以表示无限大的内容,如全体正整数
53 """

 

python基础 生成器send方法 迭代器

标签:消费者   传值   start   语句   name   条件   one   获取数据   python基础   

原文地址:https://www.cnblogs.com/flags-blog/p/11946400.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!