跳至主要內容

Python

LincZero大约 2 分钟

Python

目录

泛型

迭代器

  • 现在你可能注意到大多数容器对象都可以用 foropen in new window 遍历:

    • 列表
    • 元组
    • 字典
    • 字符串
  • 优点

    • 这种形式的访问清晰、简洁、方便。迭代器的用法在 Python 中普遍而且统一
  • 原理

  • 使用(给自己的类添加迭代器)

    • 例如

      class Reverse:
          """Iterator for looping over a sequence backwards."""
          def __init__(self, data):
              self.data = data
              self.index = len(data)
          def __iter__(self):							# 迭代器
              return self
          def __next__(self):							# 返回
              if self.index == 0:
                  raise StopIteration
              self.index = self.index - 1
              return self.data[self.index]
          
      >>> rev = Reverse('spam')
      >>> iter(rev)
      <__main__.Reverse object at 0x00A1DB50>
      >>> for char in rev:
      ...     print(char)
      ...
      m
      a
      p
      s
      

生成器

  • 概念

    • 是创建迭代器的简单而强大的工具
  • 写法

    • 它们写起来就像是正规的函数,需要返回数据的时候使用yieldopen in new window语句

    • 每次 next()open in new window 被调用时,生成器回复它脱离的位置(它记忆语句最后一次执行的位置和所有的数据值)

    • 以下示例演示了生成器可以很简单的创建出来:

      def reverse(data):
          for index in range(len(data)-1, -1, -1):
              yield data[index]
      
      '''
      >>> for char in reverse('golf'):
      ...     print(char)
      ...
      f
      l
      o
      g
      '''
      
  • 原理