Python中的賦值文法

來源:互聯網
上載者:User

標籤:assign   enc   extend   拷貝   直接   建立   star   red   賦值   

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

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中的賦值文法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.