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

Posted flag_HW

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python基础 生成器send方法 迭代器相关的知识,希望对你有一定的参考价值。

 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方法 迭代器的主要内容,如果未能解决你的问题,请参考以下文章

初学者python笔记(迭代器生成器三元表达式列表解析send()与yield())

python基础13-迭代器和生成器

Python基础 ( 六 ) —— 迭代器和生成器

python基础之三大器中迭代器和生成器

(转)python基础学习-----生成器和迭代器

Python基础-16生成器-迭代器