python中有一種賦值機制即多元賦值,採用這種方式賦值時,等號兩邊的物件都是元組並且元組的小括號是可選的。通常形式為
x, y, z = 1, 2, 'a string
'
等同於 (x, y, z) = (1, 2, 'a string')
這種賦值型別最經常用到的環境是變數交換,形如
x, y = y, x
這種交換方式無需中間變數即可交換兩個變數的值。那麼具體實現機制是怎樣的呢?
執行時,首先構造乙個元組(y, x),然後構造另乙個元組(x, y),接著用元組(y, x)賦值給(x, y),元組賦值過程從左到右,依次進行。
這裡有個錯誤猜測: 假如x=1,y=2,先令x=y,此時x=2,然後令y=x,y應該等於2? 那麼就不能實現變數交換了?
顯然這個猜測是錯誤的, 對於這個問題,應該從元組的特性說起。
x, y, z = 1, 2, 'a string
'tuple = (x, y, z)
變數名x, y, z都是引用,記憶體開闢除了三個空間分別儲存1, 2, 'a string',三個變數實質是個位址,分別指向這3個內容。
但是由這三個變數構造的元組tuple,它有三個元素,這三個元素並不是x,y,z這三個變數, 即不是3個位址,而是這三個變數所指向的位址空間裡的內容。
如果此時再另x=4,此時在位址空間會另開闢出一塊空間儲存4,x進而指向這塊空間,而tuple元組內的x則實質是4。
所以對於 x, y = y, x 來說,首先由y,x所構成的元組(y,x)其實應該表示為(2,1),那麼再從左到右賦值,就可以交換變數的值了
還有一點需要指出, 當我們使用時,我們輸入tuple[0]等時, 實際上tuple[0]是位址, 但是當我們輸入後再回車, python自動顯示這個位址所顯示的內容.
多元賦值的補充:
將多個變數同時賦值的方法我們稱為多元賦值(multuple)。將 "mul-tuple"連在一起自造的。因為採用這種方式賦值時, 等號兩邊的物件都是元組。
python 的多元賦值方式可以實現無需中間變數交換兩個變數的值, 這點和c或c++不同!
python:
#pyhon編寫
x, y = 1, 2
(x,y)
x,y=y,x
print(x,y)
輸出結果:
1 22 1
c或c++:
#c+編寫int x=1
;int y=2
;print(
"%d %d
",&x,&y);
int tmp=x;
x=y;
y=tmp;
print(
"%d %d
",&x,&y);
輸出結果:
1221
python的元組儲存的實質和多元賦值
python中有一種賦值機制即多元賦值,採用這種方式賦值時,等號兩邊的物件都是元組並且元組的小括號是可選的。通常形式為 x,y,z 1,2,a string 等同於 x,y,z 1,2,a string 這種賦值型別最經常用到的環境是變數交換,形如 x,y y,x這種交換方式無需中間變數即可交換兩個...
python的with as 的實質
with as語句等價於try finally語句 with expression as variable with block 等價於try 執行 enter 的內容 執行 with block.finally 執行 exit 內容 try捕獲異常,except處理異常,finally必定執行wi...
python的列表和元組
一 列表是以方括號 包圍的資料集合,不同資料用 隔開,列表與高階語言的陣列相似,但是列表中的資料可以是任何型別的,不同於高階語言的陣列只可以是同一型別的資料。列表的序號是從0開始的,例如,list1 1,2,3,4,5 那麼,list1 3 4 而不是3。列表的主要操作有如下幾種 example0 ...