程序主要是用来测试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)))