境界一、这个非常直接和苍白,值得注意的是对象之间的引用与复制,要确定是否只是引用的改变或者是否在内存堆中创建实体的副本。L = t 就是引用的拷贝,而L = t.copy()是内容级别的较深的拷贝。
def yanghui(max): t = [1] n = 1 while n<max: print(t) if n>0: L = t.copy() for i in range(1,len(t)): L[i] = t[i]+t[i-1] L.append(1) t = L n= n+1 return 'done'
境界二、这里面使用到了yield,将这个函数表达成为了一个生成器。
def yanghuiG(max): t = [1] n = 1 while n<max: yield t if n>0: L = t.copy() for i in range(1,len(t)): L[i] = t[i]+t[i-1] L.append(1) t = L n = n + 1 return 'done'
境界三、当t = [1]时,for i in range(len(t) - 1)]实际上是for i in range(0), 这时i是一个空list,就不会返回i,会自动跳出第一次循环,直接执行下一行语句
def yanghuiG3(max): t = [1] n= 0 while n<max: yield t t = [t[i] + t[i+1] for i in range(len(t)-1)] t.insert(0, 1) t.append(1) n = n + 1 return 'done'