一、迭代器

1、迭代器概念:
器:包含了多个值的容器
迭代:循环反馈(一次从容器在取出一个值)
迭代器:从装有多个值的容器在一次取出一个值 ls=[3,5,7,1,9]
遍历:被遍历的对象必须是有序容器
i=0
while i<len(ls):
print(ls[i])
i+=1
输出结果 3 5 7 1 9 属于无序输出 输出的是有序的 st={1,2,3,4,5}
dic={'a':1,'b':2}
2、可迭代对象概念:
对象:python中的一个对象(装有地址的变量)
可迭代对象:该对象有_iter_()方法,调用该方法返回迭代器对象
有哪些:str | list | tuple | dict | set | range() | file | 迭代器对象 | enumerate() | 生成器 [].__iter__()
().__iter__()
{}.__iter__()
{1,}.__iter__()
可迭代对象调用_iter_()方法得到迭代器对象

  

二、迭代器对象

1、迭代器对象
迭代器对象就可以做到不依赖索引取值(一次从容器中取出一个值)
迭代器对象都有_next_()方法,且通过该方法获取容器中的值,获取规则,从前往后一次一个
有哪些:file | enumerate() | 生成器

重点:
1.从迭代器对象中取元素,取一个少一个,如果要从头开始去,需要重新获得拥有所有元素的迭代器对象
2.迭代器对象也有__iter__()方法,调用后得到的是自己本身(当前含义几个元素,得到的就只有几个元素的迭代器对象)
 可迭代对象
st1={,,,,}
迭代器对象
iter_obj=st1.__iter__()
print(iter_obj) # 输出结果为集合内存地址 <set_iterator object at 0x00000222E39FC1B0> print([,,].__iter__()) # 输出结果为列表内存地址 <list_iterator object at 0x0000021FC2EB7780>
重要的点
迭代器对象取一个值就少一个值
print(iter_obj.__next__()) # 输出
print(iter_obj.__next__()) # 输出
print(iter_obj.__next__()) # 输出
print(iter_obj.__next__()) # 输出
print(iter_obj.__next__()) # 输出 print(iter_obj.__next__()) # 抛出异常StopIteration,可以通过 try 对异常进行捕获并处理 iter_obj=st1.__iter__() #上一个迭代器对象迭代取值完毕后,就取空了,如果再次取值
案例:
for v in 'abc'.__iter__():
print(v) # 输出:a b c
for v in 'abc'.__iter__():
print(v) # 输出:a b c
print('================================')
for k,v in{'a':,'b':}.items():
print(k) # 输出结果为a b
print(k,v)
# 输出结果为 a
# b
print(v) # 输出结果为1
print('================================')
r_obj=range()
for v in r_obj:
print(v) # 输出0
print('================================')
with open('abc.txt','r',encoding='utf-8') as f:
print(f.__next__())
print(f.__next__())
print(f.__next__())
迭代器对象不能求长度(内部值(元素)的个数)

while True:
try:
ele=iter_obj.__next__()
print(ele)
except SyntaxError: # 捕获异常并处理
print('取完了')
break 

三、for循环迭代器

for循环迭代器:
1、自动获取被迭代对象的迭代器对象
2、在内部一次一次调用_next_()方法取值
3、自动完成异常处理

iter_obj=st1.__iter__()
for ele in iter_obj:
print(ele)# 输出1 for ele in st1:
print(ele) # 、自动完成for ele in st1._iter_: 、自动完成异常处理 总结:
可迭代对象:有_iter_()方法的对象,调用该方法返回迭代器对象
迭代器对象:有_next_()方法的对象,也就是用该方法一次从迭代器对象中获取一个值,取出一个少一个 obj=[,,].__iter__()
for v in obj:
print(v)
if v==:
break # 输出结果为1
print(obj.__iter__().__iter__().__iter__().__iter__())
# 输出结果为True

可迭代对象:.__iter__()得到的是该对象的迭代器对象
迭代器对象:.__iter__().__iter__()得到的就是迭代器对象本身

四、生成器

生成器:就是一个迭代器对象
包含yield关键字的函数就是生成器
该函数名()得到的是生成器对象,且不会执行函数体
def my_generator():
yield 1
yield 2
yield 3
g_obj = my_generator()
# my_generator()并不会执行函数体,得到的返回值就是生成器对象
# 生成器对象就是迭代器对象
r1 = g_obj.__next__() # 1 for v in g_obj:
print(v) # 2 | 3
def fn():
print('我是生成器')
yield 'GOD'
generator_obj=fn()
print(generator_obj)
print(type(generator_obj))
# 输出结果 <generator object fn at 0x000001670AEFEF68>
·<class 'generator'> generator_obj.__iter__() # 可迭代对象
generator_obj.__next__() # 迭代器对象
def g_fn():
print()
yield '结果1'
print()
yield '结果2'
print()
yield '结果3'
print()
yield '结果4'
g_obj=g_fn() 在函数内部执行一次,在遇见下一个yield时停止,且可以拿到yield的返回值
r1=g_obj.__next__()
print(r1) #输出结果 结果1 从上一次停止的位置接着往下走,在遇见下一个yield时停止,且可以拿到yield的返回值
r2=g_obj.__next__()
print(r2)
#输出结果 结果2 print('=====================================')
生成器可以被for循环迭代 for v in g_obj:
print(v) # 输出g_fn下的全部值
生成器的应用案例
当访问的数据资源过大,可以将数据用生成器处理,一次只获取所有内容的一条资源 def my_range(min,max=,step=): # min 和 max中必须要有一个默认值
if max==:
min,max=max,min
tag=min
while True:
if tag>=max:
break
yield tag
tag+=step
# range_obj=my_range()
# print(range_obj.__next__())
# print(range_obj.__next__())
range_obj=my_range(,,)
for i in range_obj:
print(i) #输出

print('=====================================')
def my_range(min,max=,step=):
if max==:
min,max=max,min
tag=min
while True:
if tag>=max:
break
yield tag
tag+=step range_obj=my_range(-,,)
for i in range_obj:
print(i) # 反着遍历 输出结果 - - - - -

五、枚举对象

ls = [, , , , ]
通过for迭代器 循环遍历 可迭代对象,需要知道迭代的索引
count =
for v in ls:
print(count, v)
count += for i, v in enumerate(ls):
print(i, v) for i, v in enumerate('abc'): # 生成迭代器对象:[(, 'a'),(, 'b'), (, 'c')]
print(i, v)

Python—day13 迭代器、迭代器对象、for循环对象、生成器、枚举对象的更多相关文章

  1. Python Day 14 迭代器、for循环原理、枚举、生成器

    阅读内容 内容回顾   带参装饰器和wraps用法   迭代器知识引入   可迭代对象   迭代器对象   for循环迭代器   枚举对象   生成器 ##内容回顾 函数的嵌套定义:在函数内部定义另一 ...

  2. 第三章 EnumUtil根据值获取枚举对象

    项目中使用枚举类的好处这里不再赘述,在使用枚举值时,通常需要根据值来获取枚举对象,下面介绍两种实现方案: 1.在枚举类中定义方法实现 首先给出如下性别枚举类: public enum SexEnum ...

  3. python学习 day13 迭代器,生成器,枚举对象

    一.复习 1.闭包:定义在函数内部的函数(被函数嵌套的函数) 2.装饰器:闭包的一个应用场景 -- 为一个函数添加新功能的工具 3.开放封闭原则:不能修改源代码,不能修改调用方式,但可以对外提供增加新 ...

  4. Day 13 可迭代对象,迭代器对象,for循环迭代,生成器对象,枚举对象

    一.迭代器概念:# 器:包含了多个值的容器# 迭代:循环反馈(一次从容器中取出一个值)# 迭代器:从装有多个值的容器中一次取出一个值给外界# ls = 'abcdef'ls = [1, 2, 3, 4 ...

  5. Python学习笔记(4):容器、迭代对象、迭代器、生成器、生成器表达式

    在了解Python的数据结构时,容器(container).可迭代对象(iterable).迭代器(iterator).生成器(generator).列表/集合/字典推导式(list,set,dict ...

  6. python 迭代器(二):迭代器基础(二)可迭代的对象与迭代器的对比

    可迭代的对象 如果对象实现了能返回迭代器的 __iter__ 方法,那么对象就是可迭代的. 序列都可以迭代:实现了 __getitem__ 方法,而且其参数是从零开始的索引,这种对象也可以迭代. &g ...

  7. python学习Day14 带参装饰器、可迭代对象、迭代器对象、for 迭代器工作原理、枚举对象、生成器

    复习 函数的嵌套定义:在函数内部定义另一个函数 闭包:被嵌套的函数 -- 1.外层通过形参给内层函数传参 -- 2.返回内部函数对象---->  延迟执行, 开放封闭原则: 功能可以拓展,但源代 ...

  8. day13 十三、迭代器、生成器、枚举对象

    def my_generator(): print(1111) yield '结果1' print(2222) yield '结果2' print(3333) yield '结果3' print(44 ...

  9. python 迭代器/生成器/迭代对象

    生成器: 带有yield的函数 迭代器:带有next 方法的对象,可以作为内建函数next的参数 迭代对象:带有__iter__方法的对象,__iter__方法返回迭代器 -------------- ...

随机推荐

  1. pypi pack and upload

    upload 403 error need to change the name in setup.py upload 400 error need to change the version of ...

  2. 使用Windows Service Wrapper快速创建一个Windows Service 如nginx

    前言 今天介绍一个小工具的使用.我们都知道Windows Service是一种特殊的应用程序,它的好处是可以一直在后台运行,相对来说,比较适合一些需要一直运行同时不需要过多用户干预的应用程序,这一类我 ...

  3. VIM系统复制粘贴

    1 需求 系统复制粘贴主要是满足下面两个需求. 在多个对象之间复制粘贴 vim窗口与vim窗口之间 外部界面与vim窗口之间 不变复制粘贴.从外部界面复制粘贴到vim窗口时,文本不发生任何变化. 2 ...

  4. Win10 Store 还原

    Get-AppxPackage -allusers | Select Name, PackageFullName Add-appxpackage -register "C:\Program ...

  5. Django缓存机制

    缓存介绍 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增删改查,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的时候,每一次的后台操作,都会消耗很多的服务 ...

  6. angular1.3 video

    video标签动态获取播放链接是出现 Error: $interpolate:interr Interpolation Error Error: $sce:insecurl Processing of ...

  7. CentOS7部分调优命令

    一般CentOS的磁盘空间占用最大的就是日志文件,日志文件主要保存在./log目录里,因此通过以下命令可以检查目录的大小. du -ah --max-depth=1 du命令的一些常用参数: -a或- ...

  8. Vue 随机分配的打扫卫生H5 :打扫让我快乐

    情况是这样子的,每周四是我们小组打扫卫生,一共有四件活,7个人分配. 活分别是 : 扫地 拖地 倒垃圾 擦桌子 人分别是: '军', '春', '龙', '东', '贤', '磊','卿' 但是,每次 ...

  9. asp.net 跨域请求

    微软官方文档   https://docs.microsoft.com/zh-cn/aspnet/core/security/cors?view=aspnetcore-2.2

  10. CSS矩形、三角形等

    1.圆形 CSS代码如下:宽高一样,border-radius设为宽高的一半 #circle { width: 100px; height: 100px; background: red; -moz- ...