2014-03-25 13 views
0

我試圖讓Fibonacci序列分配多個變量,我不知道爲什麼這樣的:在一行

def fibonacci(n): 
    f1 = 0 
    f2 = 1 
    i = 1 

    while i < n: 
     print(f2) 
     f1 = f2 
     f2 = f1 + f2 

     i += 1 
    return f3 

返回1,2,4,8,而這樣的:

def fibonacci(n): 

    f1 = 0 
    f2 = 1 
    i = 1 

    while i < n: 
     print(f2) 
     f1, f2 = f2, f1 + f2 
     i += 1 
    return f3 

返回斐波那契數列。

+0

當您在一行中分配變量時,它們都是同時分配的。 – sihrc

+0

您是否嘗試過逐行進行? –

回答

3

在後者的示例中,右手側被評估第一

f1, f2 = f2, f1 + f2 

所以在f2計算中使用的f1的值是「舊」值。

在你的代碼,當你這樣做:

f1 = f2 
f2 = f1 + f2 

f1值,當你去評估f2新值已經改變。

0

在第一個示例中,在更新f2之前,先前迭代的值f1被丟棄。

f1, f2 = f2, f1 + f2 

可以看作是速記

tmp = f1 
f1 = f2 
f2 = tmp + f2 

是否有幫助更有意義。後者是你必須在許多其他語言中才能達到預期效果。