Python中變量賦值的8種形式、需要注意哪些細節?

Python中變量賦值的8種形式、需要注意哪些細節?

本文解釋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的數值是不可變對象,無法在原處修改數據,所以不支持自增、自減

1 a++
2 ++a
3 a--
4 --b

其中(1)-(3)無需過多解釋,唯一需要注意的是,當使用逗號的時候,python總會臨時或永久地建立成tuple來保存元素,所以x, y = "long", "shuai"在內部完全等價於(x, y) = ("long", "shuai")。

實際上,列表元素也可以賦值給元組,或者元組賦值給列表,只要兩邊的序列元素個數能對應,無所謂左右兩邊的序列類型:

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"]

但是變量和序列中的元素必須一一對應。如果變量名與元素個數不同,則會報錯,除非只有一個變量名,這表示將整個序列賦值給這個變量。

如果想要將序列中的元素賦值給不等的變量,可以考慮先將序列進行切片。

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))

覺得文章還可以的話不妨點個贊,有任何意見或者看法歡迎大家評論!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章