WEB开发网
开发学院软件开发Python 可爱的 Python: 迭代器和简单生成器 阅读

可爱的 Python: 迭代器和简单生成器

 2008-11-13 13:17:36 来源:WEB开发网   
核心提示: 这个定义的简单性是吸引人的,可以手工或者作为迭代器来利用这个生成器,可爱的 Python: 迭代器和简单生成器(7),在手工情形下,生成器可以在程序中传递,并且想要以从左到右的顺序搜索它的叶子,使用状态监控变量,并且无论在哪里以及无论何时需要(这非常灵活),都可以调用

这个定义的简单性是吸引人的。可以手工或者作为迭代器来利用这个生成器。在手工情形下,生成器可以在程序中传递,并且无论在哪里以及无论何时需要(这非常灵活),都可以调用。手工情形的一个简单示例是:

随机遍历生成器的手工使用

gen = randomwalk_generator()
try:
  while 1: print gen.next(),
except StopIteration:
  pass

然而,更多情况下,可能将生成器作为迭代器来使用,这样更为简练(并且看起来又象只是一个老式的序列):

作为迭代器的随机遍历生成器

for num in randomwalk_generator():
  print_short(num)

结束语

Python 程序员需要花一点时间来熟悉生成器的来龙去脉。最初这样一个简单构造所增加的能力是令人惊奇的;并且我预言,甚至熟练的程序员(象 Python 开发人员自己)也需要花一些时间来继续发现使用生成器过程中的一些微妙的新技术。

作为结束,让我再介绍一个生成器示例,它来自随 Python 2.2 一同分发的 test_generators.py 模块。假定一个树对象,并且想要以从左到右的顺序搜索它的叶子。使用状态监控变量,让类或函数来做这个工作是困难的。而使用生成器做这件工作简单得几乎令人眉开眼笑:

>>>> # A recursive generator that generates Tree leaves in in-order.
>>> def inorder(t):
...   if t:
...     for x in inorder(t.left):
...       yield x
...     yield t.label
...     for x in inorder(t.right):
...       yield x

上一页  2 3 4 5 6 7 

Tags:可爱 Python 迭代

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接