我一直认为元组匹配与变量赋值相同,所以我认为这两段代码做了同样的事情:a = bb = a + b和a, b = b, a + b但是,在以下两段代码中,情况并非如此,它们为我提供了不同的输出:def fib(seq_len): a = 1 b = 1 sequence = [] for i in range(seq_len): sequence.append(a) a, b = b, a + b return sequencefib(10)它给出输出:[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]和def fib(seq_len): a = 1 b = 1 sequence = [] for i in range(seq_len): sequence.append(a) a = b b = a + b return sequencefib(10)它给出以下输出:[1, 1, 2, 4, 8, 16, 32, 64, 128, 256]似乎在 的第一个定义中,前面的值被用于,但我不明白它如何记住以前的值,因为我们已经分配给了另一个值,即 在转到之前fibaa, b = b, a + babb = a + b
1 回答
慕码人2483693
TA贡献1860条经验 获得超9个赞
a, b = b, a + b等效于
t = b, a + b
a, b = t
不
a = b
b = a + b # essentially, b = 2 * b
在执行任一分配之前,必须完全评估右侧。
添加回答
举报
0/150
提交
取消