我是靠谱客的博主 伶俐羽毛,最近开发中收集的这篇文章主要介绍python特性(七):通过生成器函数构造序列对象的迭代器,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在前面的博文中介绍过如何构造序列对象的迭代器。本文将通过生成器函数来重写这篇博文的代码。


事实上,一个序列对象的迭代器,依赖于一个整数序列的迭代器。看下面的代码。


def MyGenerator(len):
    start  = 0
    while start < len:
        yield start
        start = start + 1


gen = MyGenerator(3)
print gen.next()
print gen.next()
print gen.next()
print gen.next()

当调用第1次next方法时, 会首先执行MyGenerator方法的第1行代码start = 0。然后进入循环。这里len的值通过参数传入为3。因此while的条件表达式为真。进入循环后,遇到yield语句,方法的执行过程被挂起。next方法的返回值为start的值,即0。

当调用第2次next方法时,接着上面的挂起点,往下执行start = start + 1语句,start的值变为1。接着又进入while循环的条件判断,start<len依然为真。因此,又执行yield语句。但是由于start值为1,故而这一次next方法返回的值为1。

第3次next方法的调用类似。

当调用第4次next方法时,while循环的条件判断start < len为假,while循环结束,MyGenerator方法调用也随之结束,抛出StopIteration异常。


输出结果

0
1
2
Traceback (most recent call last):
  File "test.py", line 21, in <module>
    print gen.next()
StopIteration

有了上面的结果,重写序列对象的迭代器轻而易举。


def MyGenerator(sequence):
    start  = 0
    while start < len(sequence):
        yield sequence[start]
        start = start + 1


gen = MyGenerator([1,2,3,'a','b','c'])

for i in gen:
    print i

对比之前迭代器类的代码,我们可以认识到,yield关键字为构造迭代器提供了多大的方便。它使得代码长度缩减许多,同时也大大增强了可读性。

最后

以上就是伶俐羽毛为你收集整理的python特性(七):通过生成器函数构造序列对象的迭代器的全部内容,希望文章能够帮你解决python特性(七):通过生成器函数构造序列对象的迭代器所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(33)

评论列表共有 0 条评论

立即
投稿
返回
顶部