x,y = y,y+x 和 x=y , y=x+y 有什么区别?
What is difference between x,y = y,y+x and x=y , y=x+y?
我刚刚编写了这些代码,但输出结果不同。第二个代码的输出与我预期的一样正确,但第一个代码的输出不正确。但是为什么?
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
它们看起来一样,但输出却不同,为什么?
它们给出不同的输出,因为 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
希望对您有所帮助:)
不同的是第一个例子中你会更新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)
中的元组将被分配给 x
和 y
如果您不想使用元组,则必须先将 x 的值赋给一个新变量 z,然后再用 y 的值更新它,然后使用这个新变量来计算 y 的值。
该代码来自不同的问题,但输出是斐波那契数列。
x = 0
y = 1
print(x)
while y < 50:
print(y)
z = x
x = y
y = z+y
我刚刚编写了这些代码,但输出结果不同。第二个代码的输出与我预期的一样正确,但第一个代码的输出不正确。但是为什么?
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
它们看起来一样,但输出却不同,为什么?
它们给出不同的输出,因为 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
希望对您有所帮助:)
不同的是第一个例子中你会更新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)
中的元组将被分配给 x
和 y
如果您不想使用元组,则必须先将 x 的值赋给一个新变量 z,然后再用 y 的值更新它,然后使用这个新变量来计算 y 的值。 该代码来自不同的问题,但输出是斐波那契数列。
x = 0
y = 1
print(x)
while y < 50:
print(y)
z = x
x = y
y = z+y