Python基础——迭代器与生成器

Python基础——迭代器与生成器

一、迭代器

  • 1.定义:访问集合元素的一种方式
  • 2.特点:
    • (1)一种能够记住遍历位置的对象
    • (2)从第一个元素开始访问,直到所有元素被访问完毕,只能往前不能后退
    • (3)一次只能取一个元素
    • (4)有能力处理集合元素访问异常的情况(StopIteration
  • 3.实现方式:
    • 通过定义 __next__()方法实现一次访问并取出一个元素,当容器中没有元素时抛出StopIteration异常
  • 4.定义方法:
    • iter():
       s = 'abc'
       it = iter(s)
      
    • 类中中自行定义:需要同时定义__iter__()__next__()方法
      class MyNumbers:
          def __iter__(self):
              self.a = 1
              return self
       
          def __next__(self):
              if self.a <= 20:
      	        x = self.a
      	        self.a += 1
      	        return x
      	     else:
      	          raise StopIteration
      
      • 注意:为防止出现无限循环,可设置StopIteration
  • 5.常见应用情景:
    • for循环中:for...in迭代实现(与C/C++中for循环的区别)

2.生成器

  • 1.目的:使函数成为一种迭代器
  • 2.方式:
    • yield:每次函数运行遇到yield时函数会暂停并保存当前的所有运行信息,返回yield的值,并在下一次执行next()方法时从当前位置继续执行
      def fibonacci(n): # 生成器函数 - 斐波那契
          a, b, counter = 0, 1, 0
          while True:
              if (counter > n): 
                  return
              yield a
              a, b = b, a + b
              counter += 1
      f = fibonacci(10)
      while True:
          try:
                  print (next(f), end=" ")#next调用
         except StopIteration:
                 sys.exit()
      
  • 3.注意:类中的迭代器__iter__()__next__()方法可以构造与生成器等价的方法

你可能感兴趣的:(Python基础——迭代器与生成器)