1. 程式人生 > >Python中的賦值語法

Python中的賦值語法

pytho In 打字 style 賦值語句 復制 一次 str ams

Python中復制語法有6種

Basic Form

>>>spam = spam

Tuple assignment

>>>spam, ham = spam, ham

List assignmen

>>>[spam, ham] = [spam, ham]

Sequence assignment

>>>a, b,c,d = spam

Extended sequence unpacking(Python 3.X)

>>>a, *b = spam
>>>a
s >>>b # b賦值的結果是一個list [p, a, m] >>>a, *b, c = spam >>>a s >>>b [p, a] >>>c m

對於這種復制方式,需要註意五點:

1 對於有*號變量的賦值結果,總是一個list,即使只包含一個元素

2 如果沒有剩余的值賦給有*號的變量,那就是一個空list

>>>>a, b, c, *e, d = spam
>>>a
s >>>b p >>>c a >>>d m >>>e # 與*變量的位置無關 []

3 如果一條賦值語句中出現2個或者2個以上的*變量,會報錯

4 變量個數和值的個數不匹配,也會報錯

>>>a, b, c, d,e = spam    # 值個數太少
ValueError: not enough values to unpack (expected 5, got 4)


>>>a, b = spam    # 變量個數太少
ValueError: too many values to unpack(expected 2)

5 帶*號變量不在一個sequence中,也會報錯

>>>*a = spam
SyntaxError: starred assignment target must be in a list or tuple


>>>*a, = spam       # 這樣OK
>>>a
[s, p, a, m]

Augmented assignment

>>>spams = 42
>>>spams += 42
>>>spams
84

Augmented assignment有3個優勢:

1 簡潔,可以少打字,哈哈

2 對於X += Y的形式,如果X是一個很復雜的對象,那麽Augmented assignment對X只運行一次代碼,而如果寫成X = X + Y的形式,對於X的代碼會運行兩次

3 在某些情形下,X+=Y是一種優化

>>>L = [1, 2]
>>>L = L + [3, 4]      # 這種形式的+會創建一個臨時的,新的list,然後將L和要連接的數組copy進去,最後再把這個臨時的,新的list賦值給L,效率低
>>>L
[1, 2, 3, 4]


>>>L = [1, 2]
>>>L += [3, 4]    # 這種形式直接改變L,不創建新對象,也不拷貝,效率高
>>>L
[1, 2, 3, 4]

Python中的賦值語法