python中賦值語句的特點(diǎn)和形式
1. 賦值語句的特點(diǎn)
- 賦值語句創(chuàng)建對象的引用:賦值語句總是創(chuàng)建對象的引用,而不是復(fù)制對象。因此,Python中的變量更像是指針,而不是數(shù)據(jù)儲存區(qū)域。
- 變量在首次賦值時會被創(chuàng)建:因此不需要提前聲明變量。
- 變量在引用前必須先賦值:如果引用未賦值的變量會報錯
2. 賦值語句的形式
(1. 普通形式
>>> a = 'abc' # 普通形式 >>> b = 123 >>> c = [1, 2, 3]
(2. 序列賦值
python中"="的右側(cè)可以接受任意類型的序列,也可以是可迭代的對象,只要長度等于左側(cè)序列即可。
>>> (a, b) = ('1', '2') # 元組賦值,括號可省略 >>> [a, b] = ['1', '2'] # 列表賦值 >>> a, b, c, d = 'spam' # 字符串序列賦值 # python中交換兩個變量的值可以不用穿件第三個臨時變量 >>> x, y = 1, 2 >>> x, y = y, x >>> x, y (2, 1) # 當(dāng)?shù)忍栕髠?cè)與右側(cè)變量長度不一致時,考慮用分片解決 >>> num = '123' >>> a, b = num[:1], num[1:] >>> a, b ('1', '23') >>> num = '123' >>> a, b = list(num[:1]) + [num[1:]] >>> a, b ('1', '23') # 嵌套賦值 >>> ((a, b), c) = ('12','3') >>> a, b, c ('1', '2', '3')
3.擴(kuò)展序列解包(*)
*X
:序列賦值時,帶有*的名稱會被賦值一個列表,該列表收集序列中剩下的沒被賦值給其他名稱的所有項,可用于=左右兩側(cè)變量數(shù)目不同的情況。
>>> num = [1, 2, 3, 4] >>> a, b = num # 變量個數(shù)不同會報錯 Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: too many values to unpack (expected 2) >>> a, *b = num # 擴(kuò)展序列解包 >>> a, b (1, [2, 3, 4]) >>> first, *mid, last = num # 擴(kuò)展序列解包的*可以出現(xiàn)在任何位置 >>> first, mid, last (1, [2, 3], 4)
邊界情況(特殊情況)(1. 帶星號的名稱值匹配到單個項,但仍然返回一個列表
>>> a = [1, 2, 3, 4] >>> b, c, d, *e = a >>> (b, c, d, e) (1, 2, 3, [4])
(2. 若帶星號的名稱不能匹配到任何項,則返回一個空列表
>>> a = [1, 2, 3, 4] >>> b, c, d, e, *f = a >>> (b, c, d, e, f) (1, 2, 3, 4, [])
(3. 若用了多個帶星號的名稱則會報錯
>>> a = [1, 2, 3, 4] >>> *b, c, *d = a File "<stdin>", line 1 SyntaxError: two starred expressions in assignment
(4. 帶星號的名稱沒有被編寫到一個列表中會報錯
>>> a = [1, 2, 3, 4] >>> *b = a File "<stdin>", line 1 SyntaxError: starred assignment target must be in a list or tuple >>> *b, = a >>> b [1, 2, 3, 4]
4. 多目標(biāo)賦值(連續(xù)賦值)
多目標(biāo)賦值即將最右側(cè)的對象依次賦值給左側(cè)所有的名稱。
>>> a = b = c = 0 >>> (a, b, c) (0, 0, 0)
多目標(biāo)賦值的共享引用問題
多目標(biāo)賦值其實(shí)是多個目標(biāo)對同一個內(nèi)存空間的引用,這里要分兩種情況,當(dāng)被引用對象是不可變對象時則不存在問題;但是如果多目標(biāo)都引用了同一個可變對象,則會出現(xiàn)問題
>>> a = b = 1 >>> (a, b) (1, 1) >>> b = 2 >>> (a, b) (1, 2) # a的值沒有因?yàn)閎的改變而改變 #學(xué)習(xí)中遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流群:711312441 >>> a = b = [1, 2] >>> (a, b) ([1, 2], [1, 2]) >>> b[1] = 3 >>> (a, b) ([1, 3], [1, 3]) # a的值隨著b值得改變而改變,即使沒有主動給a賦值,這是因?yàn)閍,b同時引用了一個可變對象,改變該對象則會通知改變a和b的值
到此這篇關(guān)于python中賦值語句教程的文章就介紹到這了,更多相關(guān)python賦值語句內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
服務(wù)器端jupyter notebook映射到本地瀏覽器的操作
這篇文章主要介紹了服務(wù)器端jupyter notebook映射到本地瀏覽器的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04pandas series序列轉(zhuǎn)化為星期幾的實(shí)例
下面小編就為大家分享一篇pandas series序列轉(zhuǎn)化為星期幾的實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04Pandas的數(shù)據(jù)過濾實(shí)現(xiàn)
這篇文章主要介紹了Pandas的數(shù)據(jù)過濾實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01Python calendar日歷模塊的應(yīng)用案例演示
calendar模塊是python用來處理日歷的模塊,通過不同的api和格式輸出多種形式的日歷格式,下面就通過不同的api和參數(shù)來輸出和學(xué)習(xí)calendar模塊的用法2023-06-06