fix issue

master
kenwoodjw 2019-03-05 23:19:05 +08:00
parent e67f076d2d
commit b16b512bbd
1 changed files with 3 additions and 5 deletions

View File

@ -654,11 +654,9 @@ if __name__ == "__main__":
详细参考https://manjusaka.itscoder.com/2018/02/23/something-about-decorator/
## 4.8 生成器,迭代器的区别?
迭代器是一个更抽象的概念任何对象如果它的类有next方法和iter方法返回自己本身对于string,list,dict,tuple等这类容器对象使用for循环遍历是很方便的在后台for语句对容器对象调用iter()函数iter()是python的内置函数iter()会返回一个定义了next()方法的迭代器对象它在容器中逐个访问容器内元素next()也是python的内置函数在没有后续元素时next()会抛出一个StopIteration异常。
Iterator :An iterator is an object with a next (Python 2) or `__next__ `(Python 3) method.
凡是可以for循环的都是Iterable
凡是可以next()的都是Iterator
生成器Generator是创建迭代器的简单而强大的工具。它们写起来就像是正规的函数只是在需要返回数据的时候使用yield语句。每次next()被调用时,生成器会返回它脱离的位置(它记忆语句最后一次执行的位置和所有的数据值)
迭代器是遵循迭代协议的对象。用户可以使用 iter() 以从任何序列得到迭代器(如 list, tuple, dictionary, set 等)。另一个方法则是创建一个另一种形式的迭代器 —— generator 。要获取下一个元素,则使用成员函数 next()Python 2或函数 next() function Python 3 。当没有元素时,则引发 StopIteration 此例外。若要实现自己的迭代器,则只要实现 next()Python 2`__next__`() Python 3
生成器Generator只是在需要返回数据的时候使用yield语句。每次next()被调用时,生成器会返回它脱离的位置(它记忆语句最后一次执行的位置和所有的数据值)
区别: 生成器能做到迭代器能做的所有事而且因为自动创建iter()和next()方法生成器显得特别简洁而且生成器也是高效的使用生成器表达式取代列表解析可以同时节省内存。除了创建和保存程序状态的自动方法当发生器终结时还会自动抛出StopIteration异常。
官方介绍https://docs.python.org/3/tutorial/classes.html#iterators
## 4.9 X是什么类型?