我正在研究Project euler,尽管如此.我正在编写一个快速代码来打印出Fibonacci序列.我实际上有一个不同的项目eueler方程的代码,但这实际上是我使用的算法:
x = 1
y = 0
while x < 4000000:
print x
x = y
y = x + y
Run Code Online (Sandbox Code Playgroud)
这让我有一段时间了,这本来应该有效.然后我研究了一下,发现几乎相同的代码,但有点不同的格式.它奏效了!唯一的区别是它将x和y赋值放在一行中,用逗号分隔.所以我试了一下:
x , y = 1 , 0
while x < 4000000:
print x
x,y = y, x + y
Run Code Online (Sandbox Code Playgroud)
显然,正如我所说,它有效.这真的让我很烦,因为我无法弄清楚除了聪明并且在第二个中使用更少的线之外,两者之间的区别.我不明白为什么输出不同.为什么输出不同?
在你的第一个代码中:
x = y
y = x + y
Run Code Online (Sandbox Code Playgroud)
你实际上正在分配y + y给y.由于价值x已经被覆盖.这不是你想要的吗?
在你的第二个代码中:
x, y = y, x + y
Run Code Online (Sandbox Code Playgroud)
第一y和x + y在RHS被评估,然后评价值被分配给x, y在LHS.因此,x + y不会x像第一种情况那样对新分配的值产生任何副作用.所以,你的y意志只有x + y.
因此,在实际分配完成之前evaluation,这两个表达式RHS都是如此.
是的,你的while循环之外的分配不会有任何区别.但第二种方式看起来更吸引人.