本文解釋python中變量賦值的形式,並解釋一些細節。php
python中變量賦值的幾種形式python
1 x = "long" # (1).基本形式 2 x, y = "long", "shuai" # (2).元組對應賦值 3 [x, y] = ["long", "shuai"] # (3).列表對應賦值 4 a, b, c, d = "long" # (4).序列賦值 5 a, *b = 'long' # (5).解包賦值 6 a = b = "long" # (6).多目標賦值 7 a += 3 # (7).二元賦值表達式 8 ((a, b), c) = ('lo','ng') # (8).嵌套賦值序列
注意:python的數值是不可變對象,沒法在原處修改數據,因此不支持自增、自減。shell
1 a++ 2 ++a 3 a-- 4 --b
其中(1)-(3)無需過多解釋,惟一須要注意的是,當使用逗號的時候,python總會臨時或永久地創建成tuple來保存元素,因此x, y = "long", "shuai"在內部徹底等價於(x, y) = ("long", "shuai")。ide
實際上,列表元素也能夠賦值給元組,或者元組賦值給列表,只要兩邊的序列元素個數能對應,無所謂左右兩邊的序列類型:函數
1 >>> (x,y) = (1,2) 2 >>> (x,y) = [1,2] 3 >>> [x,y] = (1,2) 4 >>> [x,y] = [1,2] 5 >>> (x,y) = 'ab' 6 >>> [x,y] = 'ab'
對於(4)賦值方式,是序列賦值的行爲,在python中,只要是序列,均可以這樣賦值。正如這裏的變量賦值狀況等價於:工具
在學習過程當中有什麼不懂得能夠加個人 python學習交流扣扣qun,784-758-214 羣裏有不錯的學習視頻教程、開發工具與電子書籍。 與你分享python企業當下人才需求及怎麼從零基礎學習好python,和學習什麼內容 1 a = "l" 2 b = "o" 3 c = "n" 4 d = "g"
若是換成其它的序列也同樣。例如:學習
1 a, b, c, d = ("shell","perl","php","python") 2 a, b, c, d = ["shell","perl","php","python"]
可是變量和序列中的元素必須一一對應。若是變量名與元素個數不一樣,則會報錯,除非只有一個變量名,這表示將整個序列賦值給這個變量。開發工具
若是想要將序列中的元素賦值給不等的變量,能夠考慮先將序列進行切片。code
1 >>> str='long' 2 >>> a, b, c = list(str[:2]) + [str[2:]] 3 >>> a,b,c 4 ('l', 'o', 'ng')
(5)的賦值方式則正好是讓變量名少於元素個數的方式。這種賦值形式稱爲序列解包(下文會專門解釋這種賦值方式),多出來的元素會所有以列表的方式賦值給最後一個變量名。正如這裏等價於:視頻
1 a="l" 2 b=["o", "n", "g"]
下面兩種賦值方式獲得的結果是同樣的,a是字符串,b是列表,b都包含3個元素:
1 a, *b = ("shell","perl","php","python") 2 a, *b = ["shell","perl","php","python"]
賦值的結果:
1 shell 2 ['perl', 'php', 'python']
(6)的賦值方式等價於:
1 b = "long" 2 a = b
python賦值時,老是先計算"="右邊的結果,而後將結果按照賦值方式賦值給"="左邊的變量。因此,這裏的過程是先將"long"賦值給變量b,再將b賦值給變量a。
由於老是先計算右邊,因此交換變量很是的方便。
1 a, b = "a", "b" 2 3 # 交換: 4 a, b = b, a 5 6 # 交換結果: 7 a = "b" 8 b = "a"
(7)的賦值方式a += 3在結果上等價於a = a + 3,在其它語言中這兩種賦值方式是徹底等價的,但在python中這種加強賦值的方式要比後者更高效率些,爲何效率要高一些,下文會稍做解釋。在很大程度上來講,Python中只要是簡化的形式,基本上都比更復雜的等價形式效率更高。
(8)的賦值方式((a, b), c) = ('lo', 'ng')是將序列進行嵌套序列賦值,將'lo'賦值給元組(a, b),'ng'賦值給c,元組又進一步賦值a='l', b='o'。這種賦值方式在python中很好用,特別是在表達式中賦值的時候,好比for循環和函數參數:
1 for (a, b, c) in [(1, 2, 3), (4, 5, 6)]:... 2 for ((a, b), c) in [((1, 2), 3), ((4, 5), 6)]:... 3 4 def f(((a, b), c)):... 5 f(((1, 2), 3))
以爲文章還能夠的話不妨點個贊,有任何意見或者見解歡迎你們評論!