我知道Python有一個強大的多任務功能,例如。我們可以做Python中如何實現多重賦值?
a, b = 1, 2
a, (b, c) = 1, (2, 3)
甚至
for a, (b, c) in [(1, (2, 3)), ]:
print a, b, c
但是這是怎麼實現的?它是一個語法糖還是更復雜的東西?
我知道Python有一個強大的多任務功能,例如。我們可以做Python中如何實現多重賦值?
a, b = 1, 2
a, (b, c) = 1, (2, 3)
甚至
for a, (b, c) in [(1, (2, 3)), ]:
print a, b, c
但是這是怎麼實現的?它是一個語法糖還是更復雜的東西?
如果你想挖掘它的細節,但它實際上適用於右側任何迭代,並且約束條件是指定的變量數必須與迭代中的元素。我不會把它稱爲語法糖,因爲它確實在運行時發生 - 它不會以某種方式提前將它神奇地轉換爲一系列單獨的賦值語句。
Tuple Assignment from "how to think like a computer scientist"
這幫助了我很多,當我試圖瞭解蟒蛇,它解釋了有關的元組分配以及如何認爲的包/解包(不必是元組,只要左手邊是分配和右手邊迭代器)
list = [0]*3 [list[0],list[1],list[2]] = {1:1,2:2,3:3} list is now "[1,2,3]"
你可能已經知道這一點,但是這只是爲了完整, 元組的分配方法也適用於功能:
a,b,c = function_return_a_three_tuple()
所以在Python函數可能看起來像他們可以返回多個值,但其虛假聲稱,他們簡單地返回一個元組和元組分配使得看起來像功能蟒蛇是更強大的,其他語言。
但爲什麼它被稱爲元組賦值?原因''a,b = [1,2]''也是合法用法。 – kxxoling
你說得對。我不知道它叫什麼名字,只是因爲它是在**元組**中引入的。但是這個名字並不是一個大問題,因爲人們也稱'a =(1,2,3)'變量賦值。在其他情況下,元組沒有賦值,因爲它們是不可變的:) – watashiSHUN