面试_生成器的调用和定义

生成器的调用和定义

def add(a, b):  # 普通求和函数
    return a + b


def test():  # 生成器函数
    for r in range(4):
        yield r


g = test()
for n in [2,10]:
    #生成器的定义出  # 仅仅是定义了2次生成器
    g=(add(n,i) for i in g)

# 生成器的调用
print(list(g))

生成器的定义

for n in [2, 10]:
    # 循环内只是定义了两次生成器, 并不会去执行他
    # 等待调用的时候再去执行
    # 调用的时候执行, 会去寻找变量n
    # n已经被for循环到最后一个, n==10

    # 第一次循环不会调用g, 只是定义了一个g生成器
    # 第二次循环才会调用g

    # 等调用g的时候, n已经循环两次=10
    # 第一次调用g, g里面是0, 1, 2, 3(test函数产生)
    # 第二次调用g, g里面是10+0, 10+1, 10+2, 10+3, 10+4
    g = (add(n, i) for i in g)
    print(list(g))

生成器的调用

'''
第二次循环才会调用g
g=(add(n,i) for i in g)
首先调用第一个g创建第二个g



第一次调用g
第一个g: 0, 1, 2, 3 (test产生) 
吧元素传入add, 
n为10(循环最后的结果)

传入第二个g的元素是:(n+g)
10+0, 10+1, 10+2, 10+3
此时g的取值范围是(10~13)




第二次调用g:
首先调用上一个g生成器(10~13)
然后add(n=10, g=(10~13))
此时g的取值范围是(20~23)


list强转g, 把g的元素取出
[20, 21, 22, 23]


'''
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容