一、迭代与迭代器原理
1、使用iter()
函数会尝试获取一个可迭代对象。
2、使用next()
函数会获取迭代器的下一个内容。
3、可以将for
循环简单地理解为while循环+不断调用next()
。
4、自定义迭代器需要实现__iter__
和__next__
两个魔法方法。
5、生成器对象是迭代器的一种。
6、iter(callable, sentinel)
可以基于可调用对象构造一个迭代器。
二、迭代器与可迭代对象
1、迭代器和可迭代对象是不同的概念。
2、可迭代对象不一定是迭代器,但迭代器一定是可迭代对象。
3、对可迭代对象使用iter()
会返回迭代器,迭代器则会返回它自身。
4、每个迭代器的被迭代过程是一次性的,可迭代对象则不一定。
5、可迭代对象只需要实现__iter__
方法,而迭代器则额外实现__next__
方法。
三、代码可维护性技巧
1、通过定义生成器函数来修饰可迭代对象,可以优化循环内部代码。
2、itertools
模块里有许多函数可以用来修饰可迭代对象。
3、生成器函数可以用来解耦循环代码、提高可复用性。
4、不要使用多个break
,拆分为函数然后直接return
会更好。
5、使用next()
函数有时可以完成一些意想不到的功能。
四、文件操作知识
1、使用标准做法读取文件内容,在处理没有换行符的大文件时会很慢。
2、调用file.read()
方法可以解决读取大文件的性能问题。
参考内容:《Python工匠——案例、技巧与工程实践》