###先看代码。

def triangles():# 定义最初的数据 1 ,存到列表中lt = [1]# 进入循环while True:# 使用yield语句产生一个生成器,返回当前列表yield lt# 列表后追加元素 0lt.append(0)# 列表生成式:原列表中前一项与后一项相加lt = [lt[i - 1] + lt[i] for i in range(len(lt))]n = 0
for i in triangles():print(i)n += 1if n == 10:break

OUT:

[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
[1, 6, 15, 20, 15, 6, 1]
[1, 7, 21, 35, 35, 21, 7, 1]
[1, 8, 28, 56, 70, 56, 28, 8, 1]
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]

###杨辉三角分析

  1. 第一行的数据为1
  2. 往下每一行比上一行多一个元素。
  3. 下行中的数据都是上行中对应的两元素之和,如果只有一个元素,则视为该元素与0之和。

###代码解析:

  1. 在方法中,先定义最初的数据1,存到列表中lt = [1]
  2. 随后进入循环,使用yield语句产生一个生成器,返回列表lt
  3. 此时,代码初次执行到此处,不会再向下执行。
  4. 在源代码下部循环中,第二次执行到triangles方法时,会从第一次的断点,也就是yield lt之后开始执行。
  5. 此时,在列表后追加一个元素0
  6. 利用列表生成式,将原列表中前一项与后一项相加(其中第一项与最后一项相加),产生一个新列表命名为lt覆盖原列表。
  7. 再次进入循环时,代码执行到yield lt语句,将最新的列表返回。
  8. n为循环控制条件。

###语言描述比较抽象,我们逐步分析数据变化。

  1. 首先方法的定义,不会执行。将0赋值给n后,直接进入循环,遍历triangles方法返回的生成器对象,此时lt = [1]triangles方法中的代码执行到yield lt被阻塞,循环中接下来执行print语句打印[1]为第一行,n的值变为1。
  2. 再次进入循环,从yield lt后面开始执行,lt.append语句将lt[1]变为[1, 0]
  3. 列表生成式中,循环次数是len(lt)为2,i初始值为0,所以新列表的第一个值为lt[i - 1] + lt[i]lt[-1] + lt[0],为1;接下来i为1,新列表的第二个值为lt[0]+lt[1],为1。至此列表生成式执行结束,新列表为[1, 1]。for循环中print语句将lt打印,n的值为2,不满足小于10的条件,继续循环。
  4. 此时进入循环,同样从yield lt后面开始执行,lt.append语句将lt[1, 1]变为[1, 1, 0]
  5. 列表生成式中,循环次数是len(lt)为3,i初始值为0,所以新列表的第一个值为lt[i - 1] + lt[i]lt[-1] + lt[0],为1;i为1时,新列表的第二个值为lt[0]+lt[1],为2;i为2,新列表的第二个值为lt[1]+lt[2],为1。至此列表生成式执行结束,新列表为[1, 2, 1]for循环中print语句将lt打印,n的值为3,不满足小于10的条件,继续循环。

至此,Python中杨辉三角的实现已经全部完成,其中最重要的点就是关于yield语句的使用与执行状况分析。此处引用(作者:千若逸|链接:https://www.jianshu.com/p/d09778f4e055|來源:简书):

yield是一个类似 return 的关键字,迭代一次遇到yield时就返回yield后面(右边)的值。重点是:下一次迭代时,从上一次迭代遇到的yield后面的代码(下一行)开始执行。
简要理解:yield就是 return 返回一个值,并且记住这个返回的位置,下次迭代就从这个位置后(下一行)开始。

Python打印杨辉三角-生成器语法yield的理解相关推荐

  1. 用python打印杨辉三角

    杨辉三角的形式如下图(图片来自维基百科)所示: 用列表的形式呈现如下: [1] [1, 1] [1, 2, 1] [1, 3, 3, 1] [1, 4, 6, 4, 1] [1, 5, 10, 10, ...

  2. python杨辉三角居中_利用python打印杨辉三角

    用python打印杨辉三角 介绍 杨辉三角,是初高中时候的一个数列,其核心思想就是说生成一个数列,该数列中的每一个元素,都是之前一个数列中,同样位置的元素和前一个元素的和. 正好在python中,也就 ...

  3. python打印杨辉三角,直角形和正三角形的杨辉三角

    一.编程题目         编程题目:python编程实现,打印直角形的杨辉三角,要求输入一个正整数n,表示打印的杨辉三角形层数,输入杨辉三角.在此基础上,实现打印正三角形的杨辉三角 二.输入输出样 ...

  4. python代码打印杨辉三角_python打印杨辉三角

    原博文 2020-03-24 18:03 − python打印杨辉三角 ```python def transfor(fun): # 定义一个转换函数, def war(N): # 带参数的装饰器,把 ...

  5. Python 中使用 for、while 循环打印杨辉三角练习(列表索引练习)。

    Python中使用for while循环打印杨辉三角练习(列表索引练习). 杨辉三角是一个由数字排列成的三角形数表,一般形式如下: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 ...

  6. python每行输出5个数_python打印杨辉三角及输出第m行第k个数

    1.打印杨辉三角及输出第m行第k个数 1.计算到m行,打印出k项 第m行有m项,m是正整数,因此k一定不会大于m,这个需求需要保存m行的数据,那么可以使用一个嵌套结构[[],[],[]] m=int( ...

  7. python杨辉三角代码,python实现杨辉三角的几种方法代码实例

    方法一:迭代 def triangle_1(x): """ :param x: 需要生成的杨辉三角行数 :return: """ trian ...

  8. 多种语言多种方法打印杨辉三角(二项式展开式各项系数)

    打印杨辉三角&二项式展开式各项系数 C语言实现 法一:数学排列组合公式法 法二:找规律法,二维数组,通俗易懂 法三:法二优化,一维数组 法四:递归 Java实现 Python实现 (a + b ...

  9. python语言输入杨辉三角_?新手求教:请问怎样用python 显示杨辉三角,任意输入一个数N,输出一个N 1层的杨辉三角。...

    如何用python输出杨辉三角 iangles里用到了yield,yield 的作用就是把一个函数变成一个 generator 用python语言输出九九乘法表 杨辉三角 求代码 1.九九乘法表def ...

最新文章

  1. 在阿里做科研是一种什么感受?
  2. 跟我学大数据分析之四:“钱”去哪儿了?
  3. Cordova 本地项目创建方法
  4. asa防火墙升级固件_奇淫巧技 | 在路由器中添加策略,阻止电视系统升级
  5. Git 修改分支的名称(亲测)
  6. haproxy详细介绍
  7. 精通ASP.NET MVC——控制器和动作
  8. [詹兴致矩阵论习题参考解答]习题1.11
  9. 来尝个鲜,Python3.8几大新功能体验,冲鸭!
  10. 软件开发常用设计模式—单例模式总结(c++版)
  11. java怎么反编译_java如何进行反编译
  12. 什么时候都要记得:生活愈是往下,嘴角愈要上扬
  13. python cox回归_TCGA+biomarker——多因素Cox回归
  14. 使用 f2py 包装 Fortran MPI 程序
  15. mt6735 [AT Command] AP下发AT+CLAC命令后 ,手机出现宕机
  16. UVA1025 Thematic Contests
  17. 【洛谷】P1138 第k小整数
  18. Spatial-Spectral Transformer for Hyperspectral Image Classification
  19. CAD制图初学入门 零基础学CAD要掌握技能精选
  20. UVA11021 Tribles 概率

热门文章

  1. 电子秤芯片方案,蓝牙体脂秤方案芯片CSU18M91
  2. 铁路虚拟服务器,12306内部多图大揭秘:竟然是这个样子
  3. 在C语言上如何编写并运行MPI程序
  4. Shader入门指南【2】
  5. 2016年最新增值税税目税率表
  6. 计算机在幼儿园教育中的应用,信息技术在幼儿园中的运用与思考
  7. QTL-seq 鹰嘴豆
  8. Walden文件统计单词出现次数
  9. 商品条形码简介(一)
  10. gg修改器怎么编写lua脚本