神刀安全网

python迭代器

迭代器用于从集合中取元素,生成器“凭空”生成元素

流畅的Python中这样定义:迭代器是实现了无参数的 ‘next‘方法,返回序列的下一个元素,;如果没有元素了,那么抛出StopIteration异常。python迭代器还实现了,’iter ‘方法,因此迭代器也可以迭代。

import re import reprlib  RE_WORD = re.compile('/w+')   class Sentence:      def __init__(self, text):         self.text = text         self.words = RE_WORD.findall(text)  # 返回字符串列表      def __repr__(self):         return "Sentence(%s)" % reprlib.repr(self.text)      def __iter__(self):         return SentenceIteration(self.words)    # 实现实例化,并返回一个迭代器   class SentenceIteration:       def __iter__(self, words):         self.words = words  # 实例引用单词列表         self.index = 0  # self.index 由于确定下一个要获取的      def __next__(self):         try:             word = self.words[self.index]   # 获得self.index索引位的单词         except IndexError:             raise  StopIteration()  # 如果索引位没有单词,则抛出StopInteration异常         self.index += 1   # 递增         return word  # 返回单词          def __iter__(self):  # 实现self.__iter__方法             return self 

迭代器和可迭代对象的区别
可迭代对象有一个iter方法,每次实例化一个新的迭代器,而迭代器要实现next方法,返回单个元素此外还要实现iter方法,返回迭代器本身。

例一

it = iter(range(4)) try:     while 1:         print(next(it)) except StopIteration:     pass  it = iter(range(4)) try:     while 1:         print(next(it)) except StopIteration:     pass ​ 0 1 2 3 

例二:

__doc__="""python 迭代器 设计模式 """  class Number():     def __init__(self,number):         self.number = number      def __iter__(self):         return NumberIter(self.number)  class NumberIter():      def __init__(self,number):         self.number = number         self.index = 1      def __next__(self):         value = int(self.number/self.index)%10         self.index *= 10         if value < 1 :             raise StopIteration         return value   if __name__=="__main__":     n = Number(1234)     for i in n:         print(i) 
python迭代器

image.png

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » python迭代器

分享到:更多 ()