Python 生成器 迭代器函数

一,生成器函数。

当函数中包含特殊字符,yield 的时候, 这个函数就是一个特殊的函数------生成器函数。
1. 函数(),并不开始执行函数,只是表示获取到了一个生成器。
2. 只有调用生成器的__next__()方法的时候,才开始执行生成器函数中的内容。
3. 调用第一个 __next__()方法的时候,只是执行到第一个 yield 为止。
下一个__next__()方法,从这个yield 之后的内容开始执行。并且到第二个 yield 为止。
4. yield 后面的是函数执行__next__() 当前方法的返回值。

生成器函数会返回yield后面的返回值,并记录当前__next__()方法运行到的位置。作为下一个__next__()方法的起始位置。
# !/usr/bin/env python
# -*- coding:utf8 -*-
"""
当函数中包含特殊字符,yield 的时候, 这个函数就是一个特殊的函数------生成器函数。
1. 函数(),并不开始执行函数,只是表示获取到了一个生成器。
2. 只有调用生成器的__next__()方法的时候,才开始执行生成器函数中的内容。
3. 调用第一个 __next__()方法的时候,只是执行到第一个 yield 为止。
   下一个__next__()方法,从这个yield 之后的内容开始执行。并且到第二个 yield 为止。
4. yield 后面的是函数执行__next__() 当前方法的返回值。
"""


# 定义一个函数
def func1():
    print(11)
    yield 1

    print(22)
    yield 2

    print(33)
    yield 3


# 仅仅获取到了一个生成器函数,并不开始执行函数
result = func1()  # result 只是生成器的一个实例化的对象
print(result)

ret = result.__next__()  # 调用__next__(),函数开始执行,并且到第一个 yield 为止。
print(ret)  # 查看一下生成器的当前的返回值

ret2 = result.__next__()  # 再次调用__next__(),函数从上次yield后面的内容开始执行,并且到下一个 yield 为止。
print(ret2)  # 再次查看一下生成器的当前的返回值


 
原文地址:https://www.cnblogs.com/xuwenwei/p/14408448.html