博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
迭代器
阅读量:5245 次
发布时间:2019-06-14

本文共 2260 字,大约阅读时间需要 7 分钟。

一.什么是迭代器

迭代器即迭代取值的工具

迭代:

迭代是一个重复的过程,每一次的重复都是基于上一次的结果来的.

 

单纯的重复并不是迭代:

while True:    print('1111')

 

迭代:

1 l=['a','b','c']2 3     def iterator(item):4         i=05         while i < len(item):6             print(l[i])7             i+=1

二.为什么要有迭代器

基于索引的迭代器取值方式只适用于列表,元组,字符串类型

而对于没有索引的字典,集合,文件则不适用

所以必须找到一种通用的并且不依赖于索引的迭代器取值方式==>迭代器

迭代器适用于可迭代类型

三.如何使用迭代器

1 l=['a','b','c'] 2 i=0 3 while i < len(l): 4     print(l[i]) 5     i+=1 6  7 l = ['a', 'b', 'c'] 8 s='hello' 9 10 def iterator(item): #item='hello'11     i = 012     while i < len(item):13         print(item[i])14         i += 115 # iterator(l)16 iterator(s)

 

可迭代对象:在python中但凡内置有__iter__方法的的对象都是可迭代对象

字符串,列表,元组,字典,集合,文件都是可迭代对象

num1=10num2=10.1s1='hello'l=[1,2,3]t=(1,2,3)d={
'x':1}s2={1,2,3}f=open('a.txt','w')s1.__iter__l.__iter__t.__iter__d.__iter__s2.__iter__f.__iter__

 

迭代器对象:指的是既有内置__iter__方法,又有内置__next__方法的对象

执行可迭代对象__iter__方法得到的就是内置的迭代器对象

文件对象本身就是迭代器对象

强调:迭代器对象一定是可迭代的对象,反之则不然

info={
'name':'egon','age':18,'is_beautiful':True,'sex':'male'}info_iter=info.__iter__()# print(info_iter)res1=info_iter.__next__()print(res1)res2=info_iter.__next__()print(res2)res3=info_iter.__next__()print(res3)res4=info_iter.__next__()print(res4)info_iter.__next__() # 一旦迭代器取值取干净,再继续取就会抛出StopIteration

 

info={
'name':'egon','age':18,'is_beautiful':True,'sex':'male'}# info=[1,2,3,4,5]info_iter=info.__iter__()while True: try: print(info_iter.__next__()) except StopIteration: break

 

for循环:迭代器循环 info={'name':'egon','age':18,'is_beautiful':True,'sex':'male'} in后跟的一定要是可迭代的对象 for k in info: # info_iter=info.__iter__()     print(k)
f=open('a.txt','r')for k in f:    print(k)

迭代器对象:指的是即内置有__iter__方法,又内置有__next方法__的对象

执行迭代器对象的__next__得到的是迭代器的下一个值

执行迭代器对象的__iter__得到的仍然是迭代器本身

iter_info=info.__iter__()# print(iter_info)print(iter_info is iter_info.__iter__() is iter_info.__iter__().__iter__().__iter__().__iter__().__iter__())

 

总结迭代器对象的优缺点:

优点:

1.提供了一种通用的可以不依赖索引的迭代取值方式

2.迭代器对象更加节省内存

f=open('movie.tar.gz','rb')f.__ next__()f=open('db.txt','rt',encoding='utf-8')print(f.__next__())print(f.__next__())print(next(f)) #f.__next__()s='hello'print(s.__len__())print(len(s))s.__iter__()print(iter(s))

 

缺点:

1.迭代器的取值不如按照索引的方式更灵活,因为它只能往后取而不能往前退

2.无法预测迭代器值的个数

转载于:https://www.cnblogs.com/chillwave/p/9173637.html

你可能感兴趣的文章
[ROS] Chinese MOOC || Chapter-4.4 Action
查看>>
简单的数据库操作
查看>>
解决php -v查看到版本与phpinfo()版本不一致问题
查看>>
iOS-解决iOS8及以上设置applicationIconBadgeNumber报错的问题
查看>>
亡灵序曲-The Dawn
查看>>
Redmine
查看>>
帧的最小长度 CSMA/CD
查看>>
xib文件加载后设置frame无效问题
查看>>
编程算法 - 左旋转字符串 代码(C)
查看>>
IOS解析XML
查看>>
Python3多线程爬取meizitu的图片
查看>>
树状数组及其他特别简单的扩展
查看>>
zookeeper适用场景:分布式锁实现
查看>>
110104_LC-Display(液晶显示屏)
查看>>
httpd_Vhosts文件的配置
查看>>
php学习笔记
查看>>
普通求素数和线性筛素数
查看>>
React Router 4.0 基本使用
查看>>
PHP截取中英文混合字符
查看>>
【洛谷P1816 忠诚】线段树
查看>>