一.迭代器
定义:器:包含了多个值的容器
迭代:循环反馈(一次从容器中取出一个值)
迭代器:从装有多个值的容器中一次取出一个值给外界
优点:不依赖索引,完成取值
缺点:不能计算长度,不能指定位取值(只能从前往后逐一取值) 二.可迭代对象
对象: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全栈开发 * 进程之间的通信,进程之间数据共享 * 180726

    进程之间的通信(IPC)队列和管道一.队列 基于管道实现 管道 + 锁 数据安全(一).队列 队列遵循先进先出原则(FIFO) 多用于维护秩序,买票,秒杀 队列的所有方法: put()(给队列里添加数 ...

  2. python全栈开发 * 07知识点汇总 * 180607

    07  set集合,深浅拷⻉以及部分知识点补充 一.while,for 循环知识点补充 二.int, str的相关操作 1.列表变字符串 # lst=["红","橙&qu ...

  3. 转:arcgis api for js入门开发系列四地图查询

    原文地址:arcgis api for js入门开发系列四地图查询 arcgis for js的地图查询方式,一般来说,总共有三种查询方式:FindTask.IdentifyTask.QueryTas ...

  4. 20190422 SQL SERVER 服务

    -- 数据库服务-- SQL Server(MSSQLSERVER)是必须要开启的,这个是数据库引擎服务,就像汽车的发动机一样-- SQL Server代理(MSSQLSERVER)是代理服务,比如你 ...

  5. Django配置相关及其它

    配置 模板 TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [ os.pat ...

  6. Numpy float64和Python float是一样的

    >>> numpy.float64(5.9975).hex() # 函数用于将10进制整数转换成16进制,以字符串形式表示. '0x1.7fd70a3d70a3dp+2' >& ...

  7. [js]作用域链查找规则获取值和设置值

    作用域链查找规则获取值和设置值 <script> /** 1.作用域链查找规则 私有作用域出现的一个变量不是私有的,则往上一级作用域查找,上级作用域没有则继续向上级查找,一直找到windo ...

  8. [LeetCode] 90.Subsets II tag: backtracking

    Given a collection of integers that might contain duplicates, nums, return all possible subsets (the ...

  9. ubuntu(centos) server安装vmware tools

    Ubuntu: root登录ubutun $ sudo su vmware中选择菜单虚拟机->安装VMware Tools 命令行如下 // 将cdrom挂载到mnt $ mount -t is ...

  10. centos共享目录

    使用VirtualBOX自带的共享文件夹功能 运行环境:  - 宿主机:windows 10  - 虚拟机:CentOS 7(我当初是按照Ubuntu环境下的教程弄的,所以其他Linux版本也可以参考 ...