Python3學習筆記 | 十二、Python的語句與語法-賦值與表達式
- 2019 年 10 月 6 日
- 筆記
一、賦值語句簡介
在Python里,賦值語句與其它語言有所不同,它不是直接把相應的值賦給變數,而是把對象的地址賦給變數,讓變數可以找到相應的對象,這個叫做對象的引用。 • 賦值語句建立對象引用值。Python賦值可以理解成存儲了對象的指針 • 變數名在首次賦值時會被創建。因為變數本身沒有類型,所以不需要提前創建 • 變數名在引用前必須先賦值。 • 執行隱式賦值的一些操作。所謂的隱式賦值,就是函數調用、模組倒入、類的定義、for 循環等。
二、賦值語句形式
_text = 『Text』 :基本形式 _text1, _text2 = 『Text1』, 『Text2』 :序列賦值-元組賦值運算 [_text1, _text2] = [『Text1』, 『Text2』] :序列賦值-列表賦值運算 t1, t2, t3, t4 = 『TEXT』 :序列賦值-字元串賦值運算 t1, *t2 = 『TEXT』 :擴展的序列解包(Python 3.x) t1 = t2 = 『TEXT』 :多目標賦值運算 t1 += 1 :增強賦值運算
三、序列賦值
>>> _1st=1 >>> _2nd=2 >>> first,second=_1st,_2nd >>> first 1 >>> second 2
變數的個數與後面序列的元素個數必須一致。
>>> [a,b,c] = (1,2,3) >>> [a,b,c] [1, 2, 3] >>> [a,b,c]='abc' >>> [a,b,c] ['a', 'b', 'c']
1、不對稱
我們有三個變數,a,b,c。我們想把text存儲到這三個變數里:
>>> a,b,c='text'[0],'text'[1],'text'[2] >>> a,b,c ('t', 'e', 'x') >>> a,b,c=list('text'[:2])+['text'[2:]] >>> a,b,c ('t', 'e', 'xt') >>> a,b='text'[:2];c='text'[2:] >>> a,b,c ('t', 'e', 'xt') >>> (a,b),c='text'[:2],'text'[2:] >>> a,b,c ('t', 'e', 'xt')2、迭代用法
>>> mylist=[(1,2,3),(4,5,6),(7,8,9)] >>> for a,b,c in mylist: ... print(a,b,c) ... 1 2 3 4 5 6 7 8 9
這個可以理解為:每次迭代的時候,提取一個列表裡的元素。第一次為例:提取(1,2,3),然後執行a,b,c = (1,2,3)。因此第一次a引用的值是1,b為2,c為3。以此類推。
>>> L=[1,2,3,4] >>> while L: ... T,L=L[0],L[1:];print(T,L) ... 1 [2, 3, 4] 2 [3, 4] 3 [4] 4 []
3、擴展序列解包
之前變數與對象不對稱的時候,需要特殊操作。這個在Python3.x之後有了新的用法。
>>> a,*b,c=1,2,3,4 >>> a,b,c (1, [2, 3], 4)
之前的循環方法,在這裡也可以使用擴展序列解包:
>>> L=[1,2,3,4] >>> while L: ... T,*L=L;print(T,L) ... 1 [2, 3, 4] 2 [3, 4] 3 [4] 4 []
擴展解包當遇到只有一個元素,或者沒有元素的時候即在邊界情況的時候:
>>> T=(1,2) >>> a,*b=T >>> a,b (1, [2]) >>> a,b,*c=T >>> a,b,c (1, 2, []) >>> *a,b,c=T >>> a,b,c ([], 1, 2) >>> *a=T File "<stdin>", line 1 SyntaxError: starred assignment target must be in a list or tuple >>> *a,=T >>> a [1, 2]
四、多目標賦值
多目標賦值就是按下面方式賦值:
>>> a=b=c='Dora'
這個時候,跟之前說的,會把所有到對象的引用賦給a, b, c三個變數。因此這個時候這三個都是完全一樣的。
>>> a=b=c='Dora' >>> a is b True >>> b is c True >>> a is c True
上邊賦值相當於:
c = 'Dora' b = c a = b
關於共享引用,請查看之前筆記:「類型與運算-其它」中的引用與賦值。
五、增強賦值語句
下面的幾個語句就是增強賦值語句: X += Y,X -= Y,X = Y X /= Y,X *= Y,X //= Y X %= Y,X &=Y,X |= Y X ^= Y,X <<= Y,X >>= Y 舉個例子: X += 1 我們可以認為這個是 X = X + 1, 但在列表中是有區別的。
>>> M=L=[1,2] >>> L=L+[3,4] >>> M,L ([1, 2], [1, 2, 3, 4]) >>> M=L=[1,2] >>> L+=[3,4] >>> M,L ([1, 2, 3, 4], [1, 2, 3, 4])
六、變數命名規則
變數名可以是大小寫字母,數字和下劃線「」。但只能以大小寫字母或下劃線開頭,不能以數字開頭。變數名是區分大小寫的。保留字元是不能使用的。 Python 3.0里的保留字元: False,class,finally,is, return,None,continue,for, lambda,try,True,def, from,nonlocal,while,and, del,global,not,with, as,elif,if,or,yield, assert,else,import,pass, break,except,in,raise 在Python2.7里exec,print是保留欄位,但nonlocal, False, True不是。 特殊變數名: _main等,前後都有兩個下劃線的變數名,有很多是有特殊意義的。
七、表達式語句
表達式,就是等號右邊的部分。表達式本身不會存儲:
>>> d=print('Dora') Dora >>> d >>> print(d) None常見表達式語句: Add(1, 2):函數調用 MyClass.Add(1,2):方法調用 Text:列印變數(交互模式) print(『My text』):列印操作