网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
使用可迭代对象时,通常不需要调用 iter() 或自己处理迭代器对象,for 语句会自动为您执行此操作,创建一个临时未命名变量以在循环期间保存迭代器。即我们再用for语句访问iterable时,实际上内部已经将其调用iter()方法转为迭代器,然后依次访问。
iterator
iterator是表示数据流的对象,重复调用iterator的 next() 方法(或将其传递给内置函数 next())会返回流中的连续对象。当没有更多数据可用时,会引发 StopIteration 异常。
迭代器需要有一个返回迭代器对象本身的 iter() 方法,所以每个迭代器也是可迭代的,并且可以在大多数接受其他可迭代对象iterable的地方使用。一个值得注意的例外是尝试多次迭代的代码。每次将容器对象(例如列表)传递给 iter() 函数或在 for 循环中使用它时,都会生成一个全新的迭代器。使用迭代器尝试这样做只会返回与前一次迭代中使用的相同的迭代器对象,在原来的基础上接着迭代。
data = [("p", 1), ("p", 2), ("p", 3),
("h", 1), ("h", 2), ("h", 3)]
a = iter(data) # 将list(iterable)作为iter的参数,每次会生成新的迭代器iterator
print(next(a))
b = iter(data)
print(next(b))
c = iter(b) # 将迭代器(iterator)作为iter的参数,不会生成新的迭代器,而是返回传入的迭代器,下次迭代会在该迭代器的基础上接着往后迭代
print(next(c))
iter()
iter() 函数用来生成迭代器,返回值为一个迭代器对象。
iter(object[, sentinel])
参数:
- object:如果没有传入sentinel参数,则object为支持迭代器协议(实现_iter_()方法的),或者是支持序列协议(实现_getitem_()方法)且是从0开始索引的collection集合对象。
- sentinel:sentinel 参数是可选的,直译过来是哨兵的意思。如果传递了第二个参数,则参数 object 必须是一个可调用的对象(如,函数),此时,iter 创建了一个迭代器对象,每次调用这个迭代器对象的__next__()方法时,都会调用 object,当可调用对象的返回值等于 sentinel 的值时,抛出 StopIteration 的异常,否则返回可调用对象的当前值。
collection:sized iterable container 大小可迭代的容器container类, collection继承container,并实现了__iter__, __len__方法,包括:序列类型,set,mapping等,dict, list, set, and tuple这些都是collection类型,collections模块扩展了更多的collection类型。
container: 提供了 contains()方法的类。包括:序列类型,set,mapping,KeysView,ItemsView等等。
举例说明一下:
常见的,只传入collection类型的数据:
In [5]: iter("123")
Out[5]: <str_iterator at 0x105c9b9e8>
In [6]: iter([1, 2, 3])
Out[6]: <list_iterator at 0x105f9f8d0>
传入sentinel参数:
该场景是创建一个 blokc-reader,即根据条件中断读取。比如:从二进制数据库文件读取固定宽度的块,直到到达文件的末尾,代码示例如下:
from functools import partial
with open('mydata.db', 'rb') as f:
# 中断条件为读到b''
for block in iter(partial(f.read, 64), b''):
process_block(block)
**深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**
![](https://img-blog.csdnimg.cn/direct/743b668910224b259a5ffe804fa6d0db.png)
![img](https://img-blog.csdnimg.cn/img_convert/bdd3c2d46f46cf0ba7b7d3ef19adea7a.png)
![img](https://img-blog.csdnimg.cn/img_convert/1b84899682dd4f2c966c303939d81e10.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618636735)**
习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618636735)**