2011-08-25 25 views
1

我是新來的Python,我想了解這句法:新的Python試圖瞭解語法

a, b = b, a + b 
+1

它被稱爲[平行分配](http://en.wikipedia.org/wiki/Assignment_(computer_science)#Parallel_assignment)。 – miku

+0

@miku:Neato - 我已經使用過這種技術很多次了,但沒有意識到它有一個正式的術語。 – Gerrat

+0

哈哈。這就像面試問題。我希望沒有人真的寫上面的代碼,但是,我想,可能我會。至少,真正的變量名稱會更有意義。 – morningstar

回答

1

,我們可以把這個給:(a, b) = (b, a + b)

考慮到a = 3b = 6

(b, a + b)返回一個元組(6, 9)這些值分配給列出的變量(a, b),並指定(a = 6, b = 9)操作。

所以最終值是a = 6b = 9

1

Python有一次傳輸多個值的能力。這意味着「將a設爲b,將b設爲a和b的和」。

有一個更全面的解釋here

+0

鏈接已經死了,你的意思是不同的頁面可能嗎? –

+0

@ShadowWizard沒有。我的意思是,當我寫它。不幸的是,該鏈接已經移動,但你仍然可以通過wayback機器找到它:http://web.archive.org/web/20100419171004/http://diveintopython.org/getting_to_know_python/multiple_values.html – cwallenpoole

+0

奇怪的是,所有其他鏈接在新域中仍然存在 –

1

a給出的b和b的值被給予更多的技術說明可發現here

0

a+b

A的值,是與tuple-decomposition(或序列拆包)的分配和也可能被稱爲多重任務語句

RIGHT上的元組評估爲然後結果被指定爲槽的時隙到左邊的變量。 (左邊是不是真的即使語法使它看起來像一個。一個元組)

所以,

a = 1 
b = 2 
a, b = b, a + b 
// a, b = 2, 1 + 2 
// a, b = 2, 3 
// a = 2 
// b = 3 

編碼愉快。

1

這是一個稱爲'unpacking'的python特徵的語法糖。這實際上意味着:

(a, b) = (b, a + b) # This is also valid syntax 

創建了元組(b, a + b),鎖定值。然後,將這些值分段分配給元組(a,b)中的標識符。由於值在分配開始之前被鎖定,因此每個值都取得期望值。這個想法來源於Haskell中的模式匹配。

1

這被稱爲序列拆包。右側被打包成一個元組(因爲逗號)。 Python包然後評估右側,然後將這些值解包到左側。

請參閱Tuples and Sequences