可爱的 Python: 迭代器和简单生成器
2008-11-13 13:17:36 来源:WEB开发网幸运的是,使用生成器比理解程序流和状态的所有概念性问题容易得多。实际上,稍加实践之后,就可以象普通函数那样容易地使用生成器。
随机遍历
让我们考虑一个相当简单的问题,可以用多种方法来解决它 ― 新方法和旧方法都可以。假设我们想要一串正的随机数字流,它比服从向后参考约束的数字流要小。明确的讲,我们希望每个后续数字比前一个数字至少大或小 0.4。而且,数字流本身不是无限的,在几个随机步骤后结束。这个示例中,当数字流中产生小于 0.1 的数字时,我们将简单地结束它。上述的约束有点象可以在“随机遍历”算法找到的约束,结束条件类似“统计”或“局部最小值”结果 ― 但当然,这要比大多数现实世界中简单。
在 Python 2.1 或更早的版本中,我们有几种方法来解决这个问题。一种方法是,简单地生成流中的数字列表并返回它。可能看起来象:
RandomWalk_List.py
import
random
def
randomwalk_list
():
last, rand = 1, random.random()
# init candidate elements
nums = []
# empty list
while
rand > 0.1:
# threshhold terminator
if
abs(last-rand) >= 0.4:
# accept the number
last = rand
nums.append(rand)
# add latest candidate to nums
else
:
print
'*',
# display the rejection
rand = random.random()
# new candidate
nums.append(rand)
# add the final small element
return
nums
更多精彩
赞助商链接