Python中的賦值語法
阿新 • • 發佈:2018-06-10
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中的賦值語法