一.迭代器
定义:器:包含了多个值的容器
迭代:循环反馈(一次从容器中取出一个值)
迭代器:从装有多个值的容器中一次取出一个值给外界
优点:不依赖索引,完成取值
缺点:不能计算长度,不能指定位取值(只能从前往后逐一取值) 二.可迭代对象
对象: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. PAT甲级1026 Table Tennis【模拟好题】

    题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805472333250560 题意: 有k张乒乓球桌,有的是vip桌 ...

  2. H/s:哈希率单位转换

    哈系率说明 挖矿能力是通过寻找矿工可以执行的地块的尝试次数来衡量的.每次尝试都包括创建一个唯一的块候选项,并通过SHA-256d(一种加密哈希函数)创建块候选项的摘要.或者,简而言之,哈希.由于这是一 ...

  3. scala-协变和逆变

    class GaoJi class ZhongJi extends GaoJi //协变=========================== class Card[+T] val cgaoji = ...

  4. Python返回多个值

    def get_abc(): a = 1 b = 2 c = 3 return a,b,c temp = get_abc() #temp = (1,2,3) a,b,c = get_abc() #a ...

  5. 十一、无事勿扰,有事通知(2)——KVO

    概述 Key-Value-Observe,简称KVO,和上节介绍的Notification师出同门,主要目的都是为了实现观察者模式. 虽说是同门师兄弟,但是各自精通的技艺却是各不相同的. 不像Noti ...

  6. TensorFlow(1)注解入门代码

    学习当然要从官方的入门文档开始. 但是这篇入门对于从0开始的初学者似乎有些困难,尤其是对于神经网络知识还是一知半解的. 敲完理解一遍还是懵逼. TensorFlow经典入门代码学习备注如下. impo ...

  7. How Many Triangles (极角排序 + 尺取法)

    题意:二维平面与有很多个点,然后求构成锐角三角形的个数. 思路:对于每一个三角形我们知道存在至少2个锐角,只要有一个钝角就不行了,所以我们的想法就是枚举所有夹角的状态,然后得知情况,确定用总个数减去- ...

  8. shell 三剑客

    grep 过滤来自一个文件或标准输入匹配模式内容. 除了grep外,还有egrep.fgrep.egrep是grep的扩展,相当于grep -E.fgrep相当于grep -f,用的少. Usage: ...

  9. Linux基础命令---cancel取消打印任务

    cancel cancel指令用来取消已经存在的打印任务. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.Fedora.openSUSE.SUSE.   1.语法       ...

  10. Centosphp安装cassandra扩展

    一.准备 当前php版本PHP Version 5.5.10,首先去http://pecl.php.net/package/cassandra,找到对应的php版本 二.下载安装 # wget htt ...