def genfibon(n): #fib sequence until n
a=1
b=1
for i in range n:
yield a
t=a
a=b
b=t+b
有人可以解释t变量吗?看似t=a
,然后是a=b
,然后是b=t
,因为a=b
和a=t
。 b=t+b
怎么办?
答案 0 :(得分:4)
假设a = 2且b = 3.
t = a # now t = 2
a = b # now a = 3, but t is unchanged
b = t + b # now b = 5
关键是第二部分。 t = a
表示t
与a
的值相同。这并不意味着t
和a
现在都是一样的。
您可以在Python提示符下尝试:
a = 3
b = a
a = 5
print(b) # still 3
答案 1 :(得分:2)
它称为交换变量。你如何替换变量的值?
正如@smarx所说,当a = 2
和b = 3
时,你如何做到a = 3
和b = 2
?
当你执行a = 3
时,a(2)的旧值会丢失,因此您不知道要将b设置为什么。所以我们将它存储在临时变量(t)中。
所以,
t = a //(saves 2 in t)
a = b //(now both a and b have same values)
b = t //(b gets the old value of a)
// now a = old value of b
// and b = old value of a.
瞧,变量是互换的。
嗯,这需要交换。这只是部分用于此代码。最后一个语句b = t + b
代码正在做什么,用a添加a的旧值(而不是替换它)。为什么?你可以通过添加前面的2来获得斐波那契序列中的下一个数字。
2,3,5是斐波那契序列,因为5 = 2 + 3(给定2和3是种子值)。这正是这段代码的作用。
答案 2 :(得分:2)
在你的第一次跑步中
yield a # will return 1
t = a # which is 1
a = b # which is 1
b = t + b # which is 2 as t = 1 and b = 1
在你的第二轮
中yield a # will return 1
t = a # which is 1
a = b # which is 2
b = t + b # which is 3 as t = 1 and b = 2
在你的第3次运行中
yield a # will return 2
t = a # which is 2
a = b # which is 3
b = t + b # which is 5 as t = 2 and b = 3
在第4轮
yield a # will return 3
t = a # which is 3
a = b # which is 5
b = t + b # which is 8 as t = 3 and b = 5
等等......
答案 3 :(得分:1)
让我们逐句发言。
t=a
表示a
的值已存储在t
。a=b
表示b
的值存储在a
中。 (因此a
现在包含系列中的下一个元素)b=t+b
表示b
的值现在为t + b
,这意味着a+b
,因为t
现在包含a
的值(根据第一个)工序)。