day13 迭代器
迭代器
'iterable' 可迭代的
内部含有__iter__方法的数据类型就是可迭代的 —— 可迭代协议

print(dir([]))
print(dir({}))
print(dir(5))
print('__iter__' in dir('abc')) # True
ret = 'abc'.__iter__()
print(ret)
'iterator' # 迭代器

迭代器可以理解为一个容器,我们从这个容器当中一个接着一个的把值取出来的过程就是迭代的过程
如何从迭代器中取值

print(ret.__next__()) # a
print(ret.__next__()) # b
print(ret.__next__()) # c
print(ret.__next__()) # StopIteration l = ['ha','hei','he']
lst_iter = l.__iter__()
print(lst_iter.__next__())
print(lst_iter.__next__())
print(lst_iter.__next__())

可迭代的 可迭代对象 python一切皆对象
迭代器
print(dir(l))
print(dir(lst_iter))
print(set(dir(lst_iter)) - set(dir(l))) # {'__next__', '__setstate__', '__length_hint__'}
lst_iter.__setstate__ # 设置从哪开始迭代
可迭代的必须含有__iter__方法 # 可迭代协议
迭代器比可迭代的多一个__next__方法
迭代器:包含__next__,__iter__方法的就是迭代器 # 迭代器协议
包含__next__方法的可迭代对象就是迭代器
迭代器是可迭代的的一部分
获得迭代器:可迭代的调用__iter__
使用迭代器:迭代器.__next__()
print('__iter__' in dir(lst_iter))
print('__next__' in dir(lst_iter))
如何判断一个变量是不是迭代器或者可迭代的

# print('__iter__' in dir(lst_iter))
# print('__next__' in dir(lst_iter))
from collections import Iterable
from collections import Iterator
print(isinstance('a',str))
print(isinstance([1,2,3,4],Iterable))
print(isinstance([1,2,3,4],Iterator))
print(isinstance(1,Iterable))
print(isinstance(1,Iterator))
print(isinstance(lst_iter,Iterator))

可迭代的:__iter__
迭代器:__iter__和__next__
迭代器和可迭代的关系:可迭代的包含迭代器
迭代器和可迭代的判断:两种方法
迭代器的工作原理
l_iter = [1, 2, 3, 4, 5].__iter__()
迭代器只是记录当前这个元素和下一个元素
print('__iter__' in dir(range(10)))
print('__next__' in dir(range(10)))
range_iter = range(10).__iter__()
print(range_iter.__next__())
print(range_iter.__next__())
迭代器的特点
惰性运算
从前到后一次去取值,过程不可逆,不可重复
节省内存
for item in [1,2,3]:
pass
# list_iter = [1,2,3].__iter__()
# list_iter.__next__()
用while循环模拟for循环的方式 —— for循环是了依赖迭代器的,且我们自己也可以仿照着写

l = [1,2,3,4,5]
l_iter = l.__iter__()
while True:
try:
print(l_iter.__next__())
except StopIteration: # 遇到StopIteration就break
break

for循环是让我们更简单的使用迭代器
用迭代器取值就不需要关心索引或者key的问题了
目前我们已知的可迭代的都是python提供给我们的
range()
文件f
enumerate()
在平时写代码的过程中,我们用for循环就够了
day13 迭代器的更多相关文章
- python 全栈开发,Day13(迭代器,生成器)
一.迭代器 python 一切皆对象 能被for循环的对象就是可迭代对象 可迭代对象: str,list,tuple,dict,set,range 迭代器: f1文件句柄 dir打印该对象的所有操作方 ...
- Python—day13 迭代器、迭代器对象、for循环对象、生成器、枚举对象
一.迭代器 1.迭代器概念: 器:包含了多个值的容器 迭代:循环反馈(一次从容器在取出一个值) 迭代器:从装有多个值的容器在一次取出一个值 ls=[3,5,7,1,9] 遍历:被遍历的对象必须是有序容 ...
- DAY13 迭代器与生成器
一.迭代器 定义:器:包含了多个值的容器 迭代:循环反馈(一次从容器中取出一个值) 迭代器:从装有多个值的容器中一次取出一个值给外界 优点:不依赖索引,完成取值 缺点:不能计算长度,不能指定位取值(只 ...
- python学习 day13 迭代器,生成器,枚举对象
一.复习 1.闭包:定义在函数内部的函数(被函数嵌套的函数) 2.装饰器:闭包的一个应用场景 -- 为一个函数添加新功能的工具 3.开放封闭原则:不能修改源代码,不能修改调用方式,但可以对外提供增加新 ...
- day13: 迭代器和生成器
1,思考所有可以被for循环的:list,tuple,set,dict,range,enumerate,f,str,差不多了,为何这些数据类型可以被for循环呢? 2,一个标准的装饰器函数 from ...
- day13迭代器与生成器
三个作业: # 1.编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码 login_dic = {'alex':False} def ...
- python基础一 day13 迭代器
# 双下方法# print([1].__add__([2]))# print([1]+[2]) # 迭代器# l = [1,2,3]# 索引# 循环 for# for i in l:# i## for ...
- day13. 迭代器与高阶函数
一.迭代器 """ 能被next调用,并不断返回下一个值的对象,叫做迭代器(对象) 概念: 迭代器指的是迭代取值的工具,迭代是一个重复的过程,每次重复都是基于上一次的结果 ...
- day13,day14
day13 迭代器 什么是迭代器? 迭代:是一个重复的过程,每一次重复,都是基于上一次的结果而进行的 器:迭代取值的工具 为何要用迭代器? 迭代器提供了一种通用的不依赖于索引的迭代取值方式 如何用迭代 ...
随机推荐
- shell课后总结
shell课后总结 作者:高波 归档:学习笔记 2017年12月4日13:31:08 快捷键: Ctrl + 1 标题1 Ctrl + 2 标题2 Ctrl + 3 标题3 Ctrl + 4 ...
- 用CSS调整scrollbar(滚动条)的配色
可以通过调整CSS的方式,来给滚动条换色. 代码如下: .uicss-cn{ height:580px;overflow-y: scroll; scrollbar-face-color:#EAEAEA ...
- C语言 函数指针三(反向调用)
动态库代码 //简单的动态库开发----报文发送 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib. ...
- 第一百五十七节,封装库--JavaScript,预加载图片
封装库--JavaScript,预加载图片 首先了解一个Image对象,为图片对象 Image对象 var temp_img = new Image(); //创建一个临时区域的图片对象alert ...
- 【BZOJ】1632: [Usaco2007 Feb]Lilypad Pond(bfs)
http://www.lydsy.com/JudgeOnline/problem.php?id=1632 我简直是个sb... ... bfs都不会写.. 算方案还用2个bfs! 都不会整合到一个! ...
- jQuery左右选择框
<!DOCTYPE html> <html> <head> <title>左右选择框</title> <style type=&quo ...
- 在ASP.NET MVC3 中利用JSONP跨域登录WEB系统
在信息系统开发的时,根据相关业务逻辑难免会多系统之间互相登录.一般情况下我们需要在多系统之间使用多个用户名和密码.这样客户就需要在多个系统之间重复登陆.每次登录都需要输入用户名和密码.最近比较流行的就 ...
- Python_selenium之窗口切换
Python_selenium之窗口切换 1. 运用switch_to.window()方法来进行窗口切换 2. 思路拆分: 浏览器获取百度贴吧网址 点击定位到一个元素,获取当前的句柄 获得所有的句柄 ...
- Android无线测试之—UiAutomator UiObject API介绍七
判断对象是否存在 1.判断对象是否存在相关API 返回值 API 描述 boolean waitForExists(long timeout) 等待对象出现 boolean waitUntilGone ...
- 根据百度地图API得到坐标和地址并在地图上显示
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout ...