背景
在联系pyhon基础时候,遇到一个百思不解的问题,于是扒拉了一下。
廖雪峰官网python 高级特性-生成器 章节
在课后联系 杨辉三角形过程中遇到的坑
先看现象
怎么和自己预期的不一样呢?难道自己抄的杨辉三角形定义都能出错? 于是我抱着怀疑的态度去打印了一下 triangles()
完全没有问题呀? 怎么上面的运行结果全是最后一行,即第10行的呢?这么诡异!?(其实看到结果我心里已经预感到出问题的地方了,只是想去理清一下其中的逻辑,顺便加深一下印象,后面才能避免类似的坑)
扒它的衣服看里面
其实我当我看到结果的时候,我就猜到多半是定义变量时候,变量指向的问题。为了看清楚并解决疑惑,必须得找到python中好用的两个工具函数:判断两个变量是否指向同一个对象 id() 和 a is b
- 好的扒衣服开始:
先把代码放到pycharm中,方便进行调试
def triangles():
ret = [1]
while True:
yield ret
for i in range(1, len(ret)):
ret[i] = pre[i] + pre[i - 1]
ret.append(1)
pre = ret[:]
# 期待输出:
# [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]
n