验证python - yield 作用的复杂程序

 程序主要是用来测试python - yield 的。yield的作用是在主函数中产生一个数传入子函数,然后从子函数返回一个值到主函数,之后如果从主函数中再用 next(g) 或者g.send(str) 进到子函数 g中,那么子函数从上次yield 跳出子函数的地方的下一行开始执行。其他的原理没什么特别需要注意的。

至于说yield是如何节省内存的,python 初级使用者可以忽略。

#encoding:UTF-8

# ****************************************************
# **    程序来自  https://www.noniu.com/jiaocheng/219.html
# ****************************************************
def pas_triangles():
    a = [1]
    while True:     # 当main 函数中的for 语句判断为False 时,循环结束
        yield a
        a = [sum(i) for i in zip([0] + a, a + [0])]

        # print([0] + a, a + [0])
        # 第一次zip之前是 [0, 1] [1, 0]  zip之后是 [(0, 1), (1, 0)]
        # zip([0] + a, a + [0])
        # 前面的 [0] + a 是为了向list a 前面插入一个 0
        # 后面的 a + [0] 是为了把两个数加起来用的
        # 这样方便计算杨辉三角
        # zip([0] + a, a + [0]) 的结果是始终是2个tuple,所以这里的for循环不用写出它的大小,系统能自动判断




if __name__ == "__main__":  # 该判断语句为真的时候,说明当前运行的脚本为主程序,而非主程序所引用的一个模块
    g = pas_triangles()
    for n in range(10):
        # fill 和 align 大概是为了打印时对齐用的,暂时不用管
        print("{0:{fill}{align}40}".format(str(next(g)), fill=" ", align="^"))
        # print(str(next(g)))

猜你喜欢

转载自blog.csdn.net/leiwangzhongde/article/details/82913066
今日推荐