境界一、这个非常直接和苍白,值得注意的是对象之间的引用与复制,要确定是否只是引用的改变或者是否在内存堆中创建实体的副本。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'