这是我的第一个问题,我开始学习Python。在以下几个方面是否有区别:
a, b = b, a + b和
a = b
b = a + b当您在下面的示例中编写它时,它将显示不同的结果。
def fib(n):
a, b = 0, 1
while a < n:
print(a, end=' ')
a, b = b, a + b
print()
fib(1000)和
def fib(n):
a, b = 0, 1
while a < n:
print(a, end=' ')
a = b
b = a + b
print()
fib(1000)发布于 2014-02-24 14:43:55
在a, b = b, a + b中,在分配给左手侧之前,计算右手侧的表达式。因此,它相当于:
c = a + b
a = b
b = c在第二个示例中,a的值在运行b = a + b时已经发生了更改。因此,结果是不同的。
发布于 2014-02-24 14:43:44
这句话:
a, b = b, a + b更接近:
temp_a = a
a = b
b = temp_a + b在将b重新分配到b值之前,a使用的是旧值b。
Python首先计算右表达式并将结果存储在堆栈中,然后接受这两个值并将它们分配给a和b。这意味着a + b是在更改a之前计算的。
在字节码级别上,请参阅How does swapping of members in the python tuples (a,b)=(b,a) work internally?以了解所有这些都是如何工作的。
发布于 2014-02-24 14:45:42
假设我们从a和b开始,如下所示:
a = 2
b = 3所以,当你这样做时:
a, b = b, a + b所发生的事情是创建元组(b, a + b)或(3, 5),然后将其解压缩到a和b中,以便a变为3,b变为5。
在第二个例子中:
a = b
# a is now 3
b = a + b
# b is 3 + 3, or 6.https://stackoverflow.com/questions/21990883
复制相似问题