python中难以理解的最常见的特性是:
迭代器(iterator),生成器(generator),装饰器(decorator),上下文管理器(context manager)
迭代器只不过是一个实现了迭代器协议的容器对象。它基于以下两个方法:
迭代器可以利用内置的iter函数和一个序列来创建,如:
当遍历完成时会引发一个StopIteration异常。这样迭代器就可以与循环兼容,因为可以捕获这个异常并停止循环。
创建自定义的迭代器,可以编写一个具有__next__方法的类,只有这个类提供返回迭代器实例的__iter__特殊方法:
下面时这个迭代器的用法实例:
迭代器本身是一个底层的特性和概念,在程序中可以不用它。但它为生成器这一更有趣的特性提供了基础
迭代器详解参考:https://blog.csdn.net/weixin_40907382/article/details/80234743,https://www.cnblogs.com/leohahah/p/10189281.html
基于yield语句,生成器可以暂停函数并返回一个中间结果。该函数会保存执行上下文,方便在下个yield语句前使用这个上下文
举个列子,斐波那契数列可以用生气器语法来实现。
可以用next()函数或for循环从生成器中获取新的元素,就像迭代器一样:
这个函数返回一个generator对象,是特殊的迭代器,可以被无限次调用,每次都会生成序列的下一个元素,不必提供使函数停止的方法。
生成器还有一个好处就是,可以节省内存空间,不是像列表一样,遍历列表时一次性把所有数据都加载到内存中,再遍历,而生成器是用一个生成一个,很大程度上节省了内存空间。
生产器时python中协程,异步并发等其他概念的基础
生成器详解参考:http://python.jobbole.com/88677/
原文:https://www.cnblogs.com/gzl420/p/10887525.html