python迭代器和生成器

  • 时间:
  • 浏览:1
  • 来源:5分PK10_5分PK10官网

[1] 占据 有另2个例外。 模块对象有有另2个秘密的只读属性 dict__,它返回用于实现模块命名空间的字典;__dict 是属性但都不 全局名称。 显然,使用本身 将违反命名空间实现的抽象,应当仅被用于事后调试器这类的场合。

本身 访问风格清晰、简洁又方便。 迭代器的使用非常普遍并使得 Python 成为有另2个统一的整体。 在幕后,for 语录会调用容器对象中的 iter()。 该函数返回有另2个定义了 __next__() 最好的办法的迭代器对象,该最好的办法将逐一访问容器中的元素。 当元素用尽时,__next__() 将引发 StopIteration 异常来通知终止 for 循环。 让我使用 next() 内置函数来调用 __next__() 最好的办法;本身 例子显示了它的运作最好的办法:

脚注

python生成器

Generator 是有另2个用于创建迭代器的简单而强大的工具。 它们的写法这类标准的函数,但当它们要返回数据前会使用 yield 语录。 每次对生成器调用 next() 时,它会从上次失去位置恢复执行(它会记住上次执行语录时的所有数据值)。 显示怎么才能 才能 非常容易地创建生成器的示这类下:

一些简单的生成器能够 写成简洁的表达式代码,所用语法这类列表推导式,将外层为圆括号而非方括号。 本身 表达式被设计用于生成器将立即被外层函数所使用的情况。 生成器表达式相比详细的生成器扎住凑但较不灵活,相比等效的列表推导式则更为节省内存。

能够 用生成器来完成的操作同样能够 用前一节所描述的基于类的迭代器来完成。 但生成器的写法更为紧凑,将会它会自动创建 __iter__() 和 __next__() 最好的办法。

除了会自动创建最好的办法和保存进程情况,当生成器终结时,它们前会自动引发 StopIteration。 那些形状结合在一同,使得创建迭代器能与编写常规函数一样容易。

看多python迭代器协议的幕后机制,让我的类加进迭代器行为就很容易了。 定义有另2个 __iter__() 最好的办法来返回有另2个带有 __next__() 最好的办法的对象。 将会类已定义了 __next__(),则 __iter__() 能够 简单地返回 self:

生成器表达式

这样 关键形状在于局部变量和执行情况会在每次调用之间自动保存。 这使得该函数相比使用 self.index 和 self.data 本身 实例变量的最好的办法更易编写且更为清晰。

这类:

到目前为止,您将会将会注意到大多数容器对象都能够 使用 for 语录: