一 、什么是迭代
1、 重复
2、下次重复一定是基于上一次的结果而来
    while True:
cmd=input(':')
print(cmd) l=[1,2,3,4]
count=0
while count < len(l):
print(l[count])
count+=1
二、 可迭代对象:obj.__iter__

三 、迭代器:iter1=obj.__iter__()
1 iter1.__next__
2 iter1.__iter__ iter1.__next__()
iter1.__next__()
iter1.__next__() 迭代器:
优点:
1 不依赖索引
2 惰性计算,节省内存 缺点:
1 不如按照索引的取值方便
2 一次性,只能往后取,不能回退
    l=[1,2,3]
for i in l: # obj=l.__iter__()
print(i)
迭代器的应用:
1、提供了一种不依赖索引的统一的迭代方法
2、 惰性计算,比如取文件的每一行
list = [1,2,3,4,5]
i = iter(list) #迭代器函数
print(i.__next__())
print(i.__next__())
print(i.__next__())
print(i.__next__())
print(i.__next__()) i = list.__iter__() #迭代器对象
i.__next__() s1='hello'
s1.__iter__()
l=[1,2,3]
l.__iter__()
t=(1,2,3)
t.__iter__()
set1={1,2,3}
set1.__iter__()
d={'a':1,'b':2,'c':3}
d.__iter__() f=open('db.txt',encoding='utf-8')
print(f.__next__())
生成器函数
生成器函数:函数体内包含有yield关键字,该函数执行的结果是生成器
def foo():
print('first------>')
yield 1
print('second----->')
yield 2
print('third----->')
yield 3
print('fouth----->') g=foo() print(g)
from collections import Iterator
print(isinstance(g,Iterator))
生成器就是迭代器

print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__()) for i in g:   #obj=g.__iter__() #obj.__next__()
print(i) '''
yield的功能:
1.与return类似,都可以返回值,但不一样的地方在于yield返回多次值,而return只能返回一次值
2.为函数封装好了__iter__和__next__方法,把函数的执行结果做成了迭代器
3.遵循迭代器的取值方式obj.__next__(),触发的函数的执行,函数暂停与再继续的状态都是由yield保存的
'''
def countdown(n):
print('starting countdown') while n > 0:
yield n
n-=1
print('stop countdown')
g=countdown(5)
print(g)
print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__()) for i in g:
print(i)

 

生成器函数补充:迭代器的特性,不能循环取值
def countdown(n):
while n > 0:
yield n
n-=1 g=countdown(5)
print(g.__next__())
print(g.__next__()) print('='*20)
for i in g:
print(i) print('*'*20)
for i in g:
print(i) for i in countdown(5):
print(i)
print('*'*20)
for i in countdown(5):
print(i)
print('*'*20)
for i in countdown(5):
print(i) print(countdown(5).__next__()) #g才是迭代器
print(countdown(5).__next__())
print(countdown(5).__next__())
print(countdown(5).__next__())
print(countdown(5).__next__())
print(countdown(5).__next__())
print(countdown(5).__next__())
print(countdown(5).__next__())
print(countdown(5).__next__())
print(countdown(5).__next__())
print(countdown(5).__next__())
print(countdown(5).__next__()) print(countdown(5),countdown(5),countdown(5))

  

最新文章

  1. 关于JAVA的数据转换总结
  2. iis7配置网站容易出现的问题(转)
  3. 关于 MaxScript 获取所有贴图
  4. 烂泥:NFS存储与VSphere配合使用
  5. ext DateTime.js在ie下显示不全
  6. I.MX6 android BatteryService jni hacking
  7. linux强大IDE——Geany配置说明
  8. h5 网页版的微博微信QQ登录
  9. ECMA Script 6_Generator
  10. js 常用正则表达式
  11. vue-cli中的check-versions.js配置文件包括semver,chalk,shell插件的解释
  12. (第十二周)final预发布视频
  13. Angular4.x 中的服务
  14. mysql Alter table设置default的问题,是bug么?
  15. 程序设计实习MOOC / 程序设计与算法(三)第二周测验
  16. Apache模块开发
  17. Socket编程概念
  18. 测试mysqldump 压缩率和时间消耗
  19. 题解 CF950B 【Intercepted Message】
  20. opencv模块介绍

热门文章

  1. 常用的python模块及安装方法
  2. 07-Mysql数据库----数据类型
  3. parity的使用
  4. css3 移入移出动画
  5. C - 最长公共子序列
  6. Android调用Java WebSevice篇之二
  7. [C/C++] #ifdef和#endif
  8. tomcat 路径&quot;/&quot;表示根目录
  9. JS格式化 /Date(xxxxxx)/的日期类型
  10. AtCoder Grand Contest 028 B - Removing Blocks 解题报告