迭代器什么是迭代器迭代器是访问可迭代对象的工具迭代器是指iter(obj)函数返回的对象(实例)迭代器可以用next(it)函数获取可迭代对象的数据
迭代器函数iter和next
iter(iterable)从可迭代对象中返回一个迭代器
Iterable,必须能提供一个可迭代对象
next(Iterator)从迭代器中获取下一个记录,如果无法获取下一条记录则触发stopiterator异常
说明
1.迭代器只能往前取值,不会后退
2.用iter函数可以返回一个可迭代对象的迭代器
实例
>>> l=[1,2,3,45,6,7,9]
>>> i=iter(l)
>>> next(i)
1
>>> next(i)
2
>>> next(i)
3
>>> next(i)
45
>>> next(i)
6
>>> next(i)
7
>>> next(i)
9
>>> next(i)
Traceback (most recent call last):File "<stdin>", line 1, in <module>
StopIteration
>>> 迭代器的用途用迭代器可以依次访问可迭代对象的数据l=[1,2,34,5]for i in l :print(x)
>>> l=[1,2,34,5]
>>> it=iter(l)
>>> while True:try:x=next(it)print(x)except StopIteration:break1
2
34
5
s={'唐僧','悟空','八戒','沙僧'}
it=iter(s)
while True:try:print(next(it))except StopIteration:break生成器
什么是生成器
生成器是能够动态提供数据的对象,生成器对象也是可迭代对象
生成器有两种
1生成器函数
2生成器表达式
生成器函数的定义
含有yield语句的函数是生成器,此函数被调用将返回一个生成器对象
yield  翻译为产生(或生成)
yield 语句
语法 yield说明:yield 用于def 函数中目的是将此函数作用生成器函数使用yield用来生成数据,供迭代器和next(it)函数使用
把生成器变成迭代器
def gen():for i in range(20):print('qqqq')yield igen1=gen()it=iter(gen1)while True:try:print(next(it))except StopIteration:breakdef gen():for i in range(20):print('qqqq',i)yield gen()
for i in gen():print(i)qqqq 0
<generator object gen at 0x7fc294b04f10>
qqqq 1
<generator object gen at 0x7fc294b04f68>
qqqq 2
<generator object gen at 0x7fc294b04f10>
qqqq 3
<generator object gen at 0x7fc294b04f68>
qqqq 4
<generator object gen at 0x7fc294b04f10>
qqqq 5
<generator object gen at 0x7fc294b04f68>
qqqq 6
<generator object gen at 0x7fc294b04f10>
qqqq 7
<generator object gen at 0x7fc294b04f68>
qqqq 8
<generator object gen at 0x7fc294b04f10>
qqqq 9
<generator object gen at 0x7fc294b04f68>
qqqq 10
<generator object gen at 0x7fc294b04f10>
qqqq 11
<generator object gen at 0x7fc294b04f68>
qqqq 12
<generator object gen at 0x7fc294b04f10>
qqqq 13
<generator object gen at 0x7fc294b04f68>
qqqq 14
<generator object gen at 0x7fc294b04f10>
qqqq 15
<generator object gen at 0x7fc294b04f68>
qqqq 16
<generator object gen at 0x7fc294b04f10>
qqqq 17
<generator object gen at 0x7fc294b04f68>
qqqq 18
<generator object gen at 0x7fc294b04f10>
qqqq 19
<generator object gen at 0x7fc294b04f68>
0
1
2
3
4
5
6
7
8
9
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99]
生成器函数的说明
生成器函数的调用将返回一个生成器对象
生成器对象是一个可迭代对象
通常用来动态生成数据
生成器函数调用return 会触发一个StopIteration异常
def myrange(start,stop,step=1):while start<stop-1:start+=stepyield start
for x in myrange(0,30,2):print(x)
l=[x**2 for x in myrange(0,30)]
print(l)
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361, 400, 441, 484, 529, 576, 625, 676, 729, 784, 841]
def jiecheng(n):for i in range(1,n+1):x=1for j in range(1,i+1) :x*=jyield x
l=list(jiecheng(5))
print(l)生成器表达式
语法
(表达式 for i in 可迭代对象 [if 真值表达式])
作用:
用推导式创建一个新生成器
说明
if 可以省略>>> gen=(x**2 for x in range(1,5) )
>>> it=iter(gen)
>>> print(next(it))
1
>>> print(next(it))
4
>>> print(next(it))
9
>>> print(next(it))
16
>>> print(next(it))
Traceback (most recent call last):File "<stdin>", line 1, in <module>
StopIteration
>>>
# def pingfangjianyi(n):
#     i=1#     while  i<n:
#         s=0
#         s=i**2+1
#         i+=1
#         yield s
# for i in pingfangjianyi(10):
#     print(i)def pingfangjianyi():l=[2,3,5,7]for j in l :s=0s=j**2+1yield s
for i in pingfangjianyi():print(i)l=[2,3,5,7]
l1=(x**2+1 for x in l )
print(list(l1))
l2=[i**2+1 for i in l]
print(l2)生成器表达式和列表推导式的区别
就是生成器只能迭代一次
且现用现生成
而列表生成静态数据
l=[2,3,5,7]
l1=(x**2+1 for x in l )
l[1]=8
print(list(l1))l=[2,3,5,7]
l2=[i**2+1 for i in l]
l[1]=8
print(l2)[5, 65, 26, 50]
[5, 10, 26, 50]迭代工具函数
作用是生成一个个性化的可迭代对象
函数 zip(iter1[,iter2[......]])
返回一个zip对象此对象用于生成元组,
该元组的每个数据来源于参数中的可迭代对象当最小的可迭代对象向不在提供数据
时迭代结束
enumerate(iterable[,start])
生成带索引的枚举对象
返回对象为索引值(index-value)
默认索引从零开始
也可以用start
指定
enumerate(sequence, start=0)def hanshu():l=[]while True:x=input('亲输入')if x=='':breakl.append(x)for s in enumerate(l,1):print('第%s行:'%s[0],s[1])
hanshu()

python 迭代器 生成器 解析相关推荐

  1. python迭代器生成器 学会再缩短一半开发效率 看看大牛是怎么写的

    一.迭代 什么叫做迭代? 比如在 Java 中,我们通过 List 集合的下标来遍历 List 集合中的元素,在 Python 中,给定一个 list 或 tuple,我们可以通过 for 循环来遍历 ...

  2. python 迭代器 生成器_Python迭代器和生成器

    迭代器认知 迭代器 (iterator): 如果一个对象同时有__iter__()和__next__()魔术方法的话,这个对象就可以称为是迭代器. __iter__()的作用是可以让for循环遍历.而 ...

  3. python 生成器装饰器_七.python迭代器生成器装饰器

    1.迭代器 1.1 什么是可迭代对象(Iterable)? 定义:可以直接作用于for循环的对象统称为可迭代对象,即Iterable. 可迭代对象包括: 1.集合数据类型:如list.tuple.di ...

  4. python迭代器生成器装饰器

    基本概念 学习python中有什么不懂的地方,小编这里推荐加小编的python学习群:895 817 687有任何不懂的都可以在里面交流,还有很好的视频教程pdf学习资料,大家一起学习交流! 1.容器 ...

  5. python迭代器和解析

    1.类表解析列表解析可以编写任意数量的瞧他的for循环,并且每一个都有可选的if测试,结构如下:[expression for target1 in iterable1 [if condition1] ...

  6. python 生成器装饰器_4.python迭代器生成器装饰器

    基本概念 1.容器(container) 容器是一种把多个元素组织在一起的数据结构,容器中的元素可以逐个地迭代获取,可以用in, not in关键字判断元素是否包含在容器中.通常这类数据结构把所有的元 ...

  7. python 迭代器 生成器_python 迭代器与生成器

    迭代器 迭代器就是iter(可迭代对象函数)返回的对象,说人话.......可迭代对象由一个个迭代器组成 可以用next()函数获取可迭代对象的数据 迭代是访问集合元素的一种方式(因为集合是无序的,所 ...

  8. python 迭代器 生成器

    1. 迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,知道所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退. 1.1 使用迭代 ...

  9. python迭代器生成器使用技巧(2):切片、遍历、索引值、多序列、多容器对象

    1. 迭代器切片 迭代器和生成器不能使用标准的切片操作,因为它们的长度事先并不知道(并且也没有实现索引). 函数 islice() 返回一个可以生成指定元素的迭代器,通过遍历并丢弃直到切片开始索引位置 ...

  10. python迭代器生成器使用技巧(1):遍历、代理、生成器创建迭代、反向迭代

    1. 手动遍历迭代器 next() 遍历一个可迭代对象中的所有元素,但是却不想使用for循环.为了手动的遍历可迭代对象,使用 next() 函数并在代码中捕获 StopIteration 异常. 通常 ...

最新文章

  1. html5调用系统声音1s响一次_HTML5声音录制/播放功能的实现代码
  2. 同事问我MySQL怎么递归查询,我懵逼了...
  3. pandas使用sort_values函数对dataframe的日期数据列进行排序(设置ascending参数进行正序或者倒序排序)
  4. R package XML安装
  5. python手机版ios-iOS 项目中如何使用 Python
  6. matlab 暂停命令(pause和input)
  7. ndk学习6: 使用gdb调试ndk程序一
  8. pdo mysql fedora_在Fedora 23 Server和Workstation上安装LAMP(Linux, Apache, MariaDB和PHP)
  9. 【转】在ASP.NET Web API 2中使用Owin基于Token令牌的身份验证
  10. java http 流_java 模拟http请求,通过流(stream)的方式,发送json数据和文件
  11. 赛前集训前的总结(警醒)
  12. 计算机网络安全 第一章绪论
  13. STM32 CAN波特率计算程序
  14. 【基于熵权-模糊综合评价法】《基于熵权-模糊综合评价法的施工项目风险评价研究》论文笔记(内附MATLAB代码)
  15. 两年数据对比柱形图_对比数据还在用千篇一律的柱形图?试试wifi对比图,让人过目不忘...
  16. 多元化邮件插图成鲜活生命力,助力邮件营销转化!
  17. 文件上传数据库,并下载(包含删除,根据条线查询等功能)
  18. RocketMQ分布式事务原理介绍
  19. 仙人掌之歌——坑,各种坑(2)
  20. Mixly(米思齐)的安装以及实现光控小夜灯

热门文章

  1. php进攻教程,如何对PHP程序中的常见漏洞进行攻击(下)_php基
  2. 计算机信息管理技术 互联网,计算机信息管理技术在网络安全中的运用思路
  3. gantt markdown
  4. AXI DMA DRIVER 阶段性 kernel driver 构建并测试(三 )
  5. 软件测试nextdata程序,Nextdata测试用例及源程序.doc
  6. FPGA之道(9)BLOCK RAM以及DSP硬核
  7. 深度学习与计算机视觉:基于Python的神经网络的实现
  8. 专访腾讯云沙开波:从无到有,打造全球领先调度系统
  9. 00.fabric的swarm集群布署:fabric相关的centos软件安装
  10. 中国是恶意程序感染率最高的国家