一.迭代器
定义:器:包含了多个值的容器
迭代:循环反馈(一次从容器中取出一个值)
迭代器:从装有多个值的容器中一次取出一个值给外界
优点:不依赖索引,完成取值
缺点:不能计算长度,不能指定位取值(只能从前往后逐一取值) 二.可迭代对象
对象:python中的一个对象(装有地址的变量)
可迭代对象:有__iter__()方法的对象,调用该方式返回迭代器对象
可迭代对象有:str | list | tuple | dict | set | range() | file | 迭代器对象 | enumerate() | 生成器
例如:[].__iter__()
().__iter__()
{}.__iter__()
{1,}.__iter__() 三.迭代器对象
迭代器对象:有__next__()方法的对象,也就是用该方法一次从迭代器对象中获取一个值,取出一个少一个
st1 = {3, 5, 1}
iter_obj = st1.__iter__() # 迭代器对象
print(iter_obj) # <set_iterator object at 0x0000026E0BF3B510>
print([1, 2, 3].__iter__()) # <list_iterator object at 0x0000026E0BFF8320>
迭代器对象取一个值就少一个值
print(iter_obj.__next__()) # 1
print(iter_obj.__next__()) # 3
print(iter_obj.__next__()) # 5
print(iter_obj.__next__()) # 抛异常 StopIteration, 可以通过try对异常进行捕获并处理
iter_obj = st1.__iter__() # 上一个迭代器对象迭代取值完毕后,就取空了,
                   如果要再次取值,要重新生成迭代器对象     迭代器对象不能求长度(内部值的个数)
while True:
try:
ele = iter_obj.__next__()
print(ele)
except StopIteration:
print("取完了")
break print(obj.__iter__().__iter__().__iter__() is obj) # True
可迭代对象.__iter__()得到的是该对象的迭代器对象
迭代器对象.__iter__().__iter__()得到的就是迭代器对象本身 四.for循环迭代器
for循环迭代器:自带异常处理的while循环,自动获取被迭代的对象的迭代器对象
iter_obj = st1.__iter__()
for ele in iter_obj:
print(ele)
for ele in st1: # 1.自动完成 for ele in st1.__iter__(): 2.自动完成异常处理
print(ele) for循环迭代器:
-- 1.自动获取被迭代对象的迭代器对象;
-- 2.在内部一次一次调用__next__()方法取值;
-- 3.自动完成异常处理 五.生成器
生成器:包含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 六.枚举对象
通过for迭代器 循环遍历 可迭代对象,需要知道迭代的索引
for i, v in enumerate(ls):
print(i, v)
for i, v in enumerate('abc'): # 生成迭代器对象:[(0, 'a'),(1, 'b'), (2, 'c')]
print(i, v)

DAY13 迭代器与生成器的更多相关文章

  1. day13迭代器与生成器

    三个作业: # 1.编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码 login_dic = {'alex':False} def ...

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

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

  3. day13: 迭代器和生成器

    1,思考所有可以被for循环的:list,tuple,set,dict,range,enumerate,f,str,差不多了,为何这些数据类型可以被for循环呢? 2,一个标准的装饰器函数 from ...

  4. python 全栈开发,Day13(迭代器,生成器)

    一.迭代器 python 一切皆对象 能被for循环的对象就是可迭代对象 可迭代对象: str,list,tuple,dict,set,range 迭代器: f1文件句柄 dir打印该对象的所有操作方 ...

  5. 迭代器、生成器 day13

    一 迭代器 迭代器的由来pythone2.2引进的,是一种序列(也是一种数据类型),也是为类对象提供一个序列的入口. for 循环str list tuple dict set 文件句柄可迭代: s ...

  6. day13 python学习 迭代器,生成器

    1.可迭代:当我们打印 print(dir([1,2]))   在出现的结果中可以看到包含 '__iter__', 这个方法,#次协议叫做可迭代协议 包含'__iter__'方法的函数就是可迭代函数 ...

  7. Python_迭代器、生成器、列表推导式,生成器表达式

    1.迭代器 (1)可迭代对象 s1 = ' for i in s1: print(i) 可迭代对象 示例结果: D:\Python36\python.exe "E:/Python/课堂视频/ ...

  8. Python 从零学起(纯基础) 笔记 之 迭代器、生成器和修饰器

    Python的迭代器. 生成器和修饰器 1. 迭代器是访问集合元素的一种方式,从第一个到最后,只许前进不许后退. 优点:不要求事先准备好整个迭代过程中的所有元素,仅仅在迭代到某个元素时才计算该元素,而 ...

  9. Python之模块,迭代器与生成器

    本节涉及内容: 1. 迭代器和生成器 2. 递归 3. 字符串格式化 4. 模块 内置模块 自定义模块 第三方模块 5. 序列化的模块 json pickle (一). 迭代器和生成器: 迭代器:  ...

随机推荐

  1. python使用suds调用webservice接口

    最近做接口对接,遇到了.net开发的webservice接口,因为python第一次与webservice对接,连问带查,最后使用suds库来实现了 1.安装suds mac: sudo pip in ...

  2. python-----函数参数类型

    #函数参数类型:1 位置参数 2 默认参数 3 关键字参数 4可变参数 包裹位置参数*args 包裹关键字参数 **kargs#参数位置顺序:先位置参数,默认参数,包裹位置,包裹关键字(定义和调用都应 ...

  3. Cesium 实践

    详细内容请参考教程:https://www.jianshu.com/p/31c3b55a21eb 该教程翻译自官方英文教程,对入门cesium 帮助很大. 2,Cesium项目实例    实践: 问题 ...

  4. DBMS_METADATA.set_transform_param格式化输出

    DBMS_METADATA.set_transform_param格式化输出获得DDL --输出信息采用缩排或换行格式化 EXEC DBMS_METADATA.set_transform_param( ...

  5. 【Mac】-NO.100.Mac.1.java.1.001-【Mac Install multiple JDK】-

    Style:Mac Series:Java Since:2018-09-10 End:2018-09-10 Total Hours:1 Degree Of Diffculty:5 Degree Of ...

  6. #WEB安全基础 : HTTP协议 | 0x1 TCP/IP通信

    TCP/IP是如何通信的呢? 请看图 用TCP/IP协议族通信时,会通过分层顺序与对方进行通信.发送端从应用层往下走,接受层从链路层往上走. 客户端为了浏览界面在应用层发送请求,为了方便传输在传输层的 ...

  7. count列表中字符出现的次数

    如何count列表中字符出现的次数?可以将其生成一个字典.key是列表中的字符串,value是出现的次数 例如gen = [2, 3, 4, 5, 6, 7, 3, 4, 5, 6, 7, 8, 4, ...

  8. 给学习立个flag

    今天是2018年7月7号,此时的砖相比昨天格外烫手,望着手套因被磨破而露出来的半截手指头,一股股热浪溜溜的从指间划过,背后还有小山一样高的砖头,感觉对面today店里的冰镇西瓜又成了不可奢望的梦... ...

  9. fabric 更详尽的用法

    项目发布和运维的工作相当机械,频率还蛮高,导致时间浪费在敲大量重复的命令上. 修复bug什么的,测试,提交版本库(2分钟),ssh到测试环境pull部署(2分钟),rsync到线上机器A,B,C,D, ...

  10. 洛谷P2820 局域网 (最小生成树)

    题目链接:https://www.luogu.org/problemnew/show/P2820 题目背景 某个局域网内有n(n<=100)台计算机,由于搭建局域网时工作人员的疏忽,现在局域网内 ...