2016-01-05 172 views
11

逗號多任務我試圖找到的this的解釋,疑難雜症部分:與蟒蛇

b = "1984" 
a = b, c = "AB" 
print(a, b, c) 

回報:

('AB', 'A', 'B') 

我明白多發生率等於:

a = b = 1 

但將它與逗號一起使用,我無法理解行爲,爲什麼它的思想我窩這樣嗎?

回答

12

答案是

a = b, c ="AB" 

行爲,如:

a = (b, c) = "AB" 

這就是爲什麼:

a = "AB" and b = "A" and c = "B" 
+0

輝煌,我花了一分鐘,以瞭解=「AB」,以防別人想知道,是因爲一個指向內存中「AB」存儲,與第二次賦值的結果無關 –

+0

有趣的是,'a =「AB」'在*'(b,c)=「AB」'之前實際執行*(爲了看到這一點,你必須構造一個情境在哪些作業有副作用)。這對我來說是違反直覺的,因爲C/C++會以相反的順序執行它。 – jez

-2

這歸結於操作的順序,2號線其實是兩個不同的語句。

a = b 

首先完成。然後

b, c = "AB" 

解開「AB」的值並將「A」分配給b和「B」給c。

+0

'a = b'先不*先完成。如果是的話,你會得到OP的預期行爲,而'a'最終會變成'1984''。 'a =「AB」'和'(b,c)=「AB」'是實際發生的兩個分配(在這種情況下它們執行的順序不是問題) – jez

+0

...但是'a =「AB」* * *首先在'b =''A''和'c =「B」'之前完成,這大概就是你想說的,而且我必須說,這讓我吃驚按照順序執行作業 - 但是,如果作業有副作用,順序就很重要 – jez

+3

不知道我現在在想什麼,我讀了我寫的東西....今天早上沒有足夠的咖啡 – BenJ

0
 
a = b, c = "AB" 

不會解釋你認爲它的方式。你有一個多重任務,但它不是a = b和c =「AB」。它是c,b =「AB」和a =「AB」。在python

 
x = y = z = 1 

被解釋爲x,y和z獲取分配值1而逗號用於解壓縮的值到各個變量的列表,所以B,C =「AB」解包「AB」到「 A「和」B「。因此,在這行的末尾,

 
a = b, c = "AB" 
a == "AB" 
b == "A" 
c == "B"