Python 中的生成器
Python 中的生成器
从现在开始,对 Python 的讲解慢慢进入深水区,有什么不理解的,可以在评论区留言询问。
在 Python 中,生成器是一种生成迭代器的方便的方法,可以通过实现生成器函数实现的。生成器函数和普通函数类似,唯一的不同点是,生成器函数使用 yield 语句返回,而不是 return 语句。生成器函数中也可以包含 return 语句,但是 return 语句不是用来返回迭代器的。
根据定义,如果一个函数中至少有一个 yield 语句,那么它就是一个生成函数。使用 yield 语句的主要区别在于,它会暂停函数并保存其内部状态,当下次调用函数时,它会从上次 yield 的行开始。这种设计模式使迭代器功能变得简单而高效。
在内部,__iter__ 和 __next__ 等方法是自动实现的,StopIteration 异常也是自动引发的。本地属性及其值在连续调用之间被保留,开发者无需执行额外的逻辑。每当 Python 解释器识别到一个生成器函数(包含 yield 语句的函数)时,它就会提供所有这些功能。
为了了解生成器的工作原理,我们将从一个简单的生成器示例开始,该示例用于生成字母表前三个字母的序列:
def 天干迭代器的生成器():
yield '甲'
yield '乙'
yield '丙'
yield '丁'
yield '戊'
yield '己'
yield '庚'
yield '辛'
yield '壬'
yield '癸'
if __name__ == '__main__':
iter1 = 天干迭代器的生成器()
iter2 = 天干迭代器的生成器()
print(iter1.__next__())
print(next(iter1))
print(iter2.__next__())
print(next(iter2))
在这个例子中,我们使用 yield 语句实现了一个生成器。在主程序中,我们做了以下事情:
- 调用
天干迭代器的生成器函数,获取了两个迭代器,iter1和iter2; - 对于两个迭代器,调用它的
__next__方法,输出一个天干; - 在两个迭代器上调用
next函数,输出下一个天干。
以上代码的输出结果是:
甲
乙
甲
乙
接下来,我们修订 星期类 类,不再单独定义一个迭代器

最低0.47元/天 解锁文章
2550

被折叠的 条评论
为什么被折叠?



