x,y = y,y + x和x = y,y = x + y之间有什么区别?

时间:2018-04-20 12:09:58

标签: python variable-assignment fibonacci

我刚刚编写了这些代码,但输出结果不同。第二个代码的输出是我所期望的,但第一个代码的输出不正确。但为什么呢?

def fib(n):
    x = 0
    y = 1
    print x
    for i in range(n):
        x = y
        y = x+y
        print x
    return x

输出是;当n = 5时

0
1
2
4
8
16


def fib(n):
    x,y = 0,1
    print x
    for i in range(n):
        x,y = y,x+y
        print x
    return x

输出是;当n = 5时

0
1
1
2
3
5

第二个代码是正确的,但是, x,y = y,x + y和 x = y,y = x + y 它们看起来一样,但输出却不同?

3 个答案:

答案 0 :(得分:0)

它们给出不同的输出,因为x = y,然后y = x + y,你将x设置为y的值。然后你取x,一旦它的值被更新并将其添加到y以找到y变量。使用等式的y = y + x部分中的一行变量声明(x,y = y,y + x),它将使用先前的x值而不是您在该行中设置的值。

如果你有:

x=0
y=1

然后你尝试了一行声明,它看起来像这样:

x,y=1,0+1
x,y=y,x+y

我希望这有助于:)

答案 1 :(得分:0)

不同之处在于您将更新x,然后在第一个示例中使用它,您将在第二个示例中直接使用它。

x, y = 0, 1
x = y     # after this line x will be 1
y = x + y   # y = 1 + 1

第二个例子

x,y = 0, 1
x,y = y,x+y  # x, y = (1, 0 + 1) the old value of x will be used

这是因为它会首先在右侧生成元组,之后,您案例(1, 1)中的元组将被分配到xy

答案 2 :(得分:0)

如果不使用元组,则必须先将x的值分配给新变量z,然后再使用y值对其进行更新,并使用此新变量来计算y的值。 代码来自另一个问题,但是输出是斐波那契数列。

    x = 0
    y = 1
    print(x)
    while y < 50:
        print(y)
        z = x
        x = y
        y = z+y