为什么一个班轮的结果是不同的

时间:2016-04-18 16:35:45

标签: python

使用Fibonacci序列时:

a = 1
b = 3
a, b = b, a + b
print a, b

这适用于a = 3b = 4

现在,如果我将其重新编码为:

a = 1
b = 3
a = b
b = a + b
print a, b

结果变量b6而不是4

发生了什么"背后的场景"当使用单行a, b = b, a + b时?

3 个答案:

答案 0 :(得分:6)

这是tuple packing and sequence unpacking的组合。它的解析方式与

相同
(a, b) = (b, a + b)

在分配之前评估右侧的元组,这就是使用“旧”值的原因。

答案 1 :(得分:0)

你说 b = 3 然后 a = b 然后 b = a + b 这是一样的 b = b + b 或者,换句话说, b = 3 + 3, 所以b = 6

第一个就像a, b = 3, 1 + 3a, b = 3, 4所以b = 4

答案 2 :(得分:0)

( )不要将序列设为元组,而是,

a, b = b, a + b # => (a,b) = (a, a+b) if written with brackets

所以,它的标准元组拆包。但是名称 ab的问题是,它们现在是不同对象的名称,即那些称为{{1}的对象以前是b的结果。这种行为部分是由于python中的变量名称是 names ,而不是像C一样存储值的盒子。