2009-09-02 100 views
8

以下是我發現的解決數學問題的Python代碼片段。它到底在做什麼?我不太確定Google要做什麼。這段Python代碼在做什麼?

x, y = x + 3 * y, 4 * x + 1 * y 

這是一種特殊的Python語法嗎?

回答

16
x, y = x + 3 * y, 4 * x + 1 * y 

是等價的:

x = x + 3 * y 
y = 4 * x + 1 * y 

EXCEPT它使用的原始值x和y的兩種計算 - 因爲x和y的新值不分配,直到兩個計算完成。

通用形式是:

x,y = a,b 

其中a和b是其值獲得分別分配給x和y的表達式。實際上,你可以指定任意元組(一組逗號分隔值),以同樣大小的變量,任何元組 - 例如,

x,y,z = a,b,c 

也將工作,但

w,x,y,z = a,b,c 

不會因爲右側元組中值的數量與左側元組中變量的數量不匹配。

+4

我認爲一個臨時變量增加了清晰度。希望你不要介意 – hop

+4

我實際上認爲用一個強調的「EXCEPT」解釋它會讓問題變得更清楚,所以我恢復了這個改變。無論如何感謝改善的嘗試,我只是在這件事上有着不同的想法。 :) – Amber

+0

完美的感覺。看到它包裹在括號中使得它完全清楚。非常容易閱讀它,並錯過了那個小細節。謝謝! –

12

這是tuple的分配,也稱爲序列拆包。也許它更清晰,當你周圍添加元組括號:

(x, y) = (x + 3 * y, 4 * x + 1 * y) 

x + 3 * y被分配到x和值4 * x + 1 * y被分配到y

這是相同的:

​​
+7

如果以不同的方式對括號進行分組,可能會更清楚:'x,y =(x + 3 * y),(4 * x + 1 * y)'。逗號可能很容易在那裏錯過。 –

+0

啊,是的,括號使得這一切都清楚了 - 眼前看不到它[拍額頭] ... –

0

我最近也看到了這個被稱爲「同時分配」,這似乎捕捉到的幾個問題的答案的精神。