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

最新文章

  1. java Io缓冲区复制文件
  2. 3 Servlet监听器
  3. 硬盘参数之TLER
  4. 基于 Equinox 的 OSGi Console 的研究和探索
  5. windows 下面的内存泄漏排查.
  6. Linux服务器的远程IP限制
  7. jQuery选择器(属性过滤选择器)第六节
  8. ASP.NET没有魔法——ASP.NET OAuth、jwt、OpenID Connect
  9. 使用git将本地代码传到github
  10. Linux中常用操作命令(转)
  11. B. Yet Another Array Partitioning Task ——cf
  12. Cent OS安装使用ffmpeg(完整版)
  13. socket练习--ssh
  14. Vue + Element UI 实现权限管理系统 前端篇(十):动态加载菜单
  15. Could not autowire field: private java.lang.Integer com.taotao.sso.service.impl.UserServiceImpl.SSO_
  16. The Dominator of Strings HDU - 6208(ac自动机板题)
  17. Codeforces Round #313 (Div. 1) C. Gerald and Giant Chess DP
  18. 安卓测试之---Monkey
  19. Django Restframework 实践(一)
  20. 兔子--android中百度地图的开发

热门文章

  1. js方法的积累
  2. Ubuntu软件安装和查看已安装相关知识
  3. nessus无法访问https://localhost:8834/#/,解决方法。
  4. CH#46 磁力块 分块
  5. 拦截器、过滤器、@Aspect 区别
  6. 编程实现类似Linux系统的cp功能
  7. python框架之Django(1)-第一个Django项目
  8. 蓝桥杯 基础训练 2n皇后
  9. 对字符串md5加密
  10. 51nod 1101 换零钱 (完全背包)